大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺
一、机器数和真值
在学习原码、反码和补码之前,需要先了解机器数和真值的概念。
1、机器数
一个数在计算机中的二进制表示形式,叫做这个数的机器数。机器数是带符号的,在计算机用一个数的最高位存放符号,正数为0,负数为1.
比如,十进制中的数 +2 ,计算机字长为8位,转换成二进制就是00000010。如果是 -2 ,就是 10000010 。
那么,这里的 00000010 和 10000010 就是机器数。
2、真值
机器数的第一位是符号位,后边才是真正的数值,所以机器数的形式值就不等于真正的数值。例如上面的有符号数10000011,其最高位1代表负,其真正数值是 -2 而不是形式值130(10000010转换成十进制等于130)。所以,为区别起见,将带符号位的机器数对应的真正数值称为机器数的真值。
例:
0000 0001的真值 = +000 0001 = +1
1000 0001的真值 = –000 0001 = –1
二、原码、反码、补码的基础概念和计算方法
1. 原码
原码就是符号位加上真值的绝对值,即用第一位表示符号,其余位表示值。比如如果是8位二进制:
[+1](原码) = 0000 0001
[-1](原码) = 1000 0001
第一位是符号位。因为第一位是符号位,所以8位二进制数的取值范围就是:
[1111 1111 , 0111 1111]
即
[-127 , 127]
原码是人脑最容易理解和计算的表示方式。
2. 反码
反码的表示方法是: 正数的反码是其本身,负数的反码是在其原码的基础上,符号位不变,其余各个位取反。
[+1] = [00000001](原码)= [00000001](反码)
[-1] = [10000001](原码)= [11111110](反码)
可见如果一个反码表示的是负数,人脑无法直观的看出来它的数值。通常要将其转换成原码再计算。
3. 补码
补码的表示方法是:正数的补码就是其本身,负数的补码是在其原码的基础上,符号位不变,其余各位取反,最后+1 (即在反码的基础上+1)。
[+1] = [00000001](原码) = [00000001](反码) = [00000001](补码)
[-1] = [10000001](原码) = [11111110](反码) = [11111111](补码)
对于负数,补码表示方式也是人脑无法直观看出其数值的。通常也需要转换成原码在计算其数值。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/192905.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...