一、首先来说一下“ 正数 ”的原码、反码、补码的表示方式
- 原码的表示方式:
1、将最高位作为符号位,0为正,1为负。
2、其他数字位则是数字绝对值的二进制表示方式。 - 反码、补码 和 原码一样。
正数表示方式,举例数字 127
原码:数字 127,为正数,最高位符号位为0,则表示为0 111 1111。
反码:与原码一样,表示为 0 111 1111
补码:与原码一样,表示为 0 111 1111。
(正常写二进制,中间不用加空格,四位一空格是为了容易看,最高位0和后边三位之间的空格也是为了容易看!)
二、再来说一下“ 负数 ”的原码、反码、补码的表示方式
- 原码:负数与正数的原码表示方式,除最高位不一样,负数的最高位符号位是1,其他数字位的表示方式是一样的
- 反码:负数的反码表示方式是,原码的最高位符号位不变,其他数字位按位取反,即 0变1,1变0。
- 补码:负数的反码加1。
负数表示方式,举例数字 -127
原码:数字 -127,为负数,最高位符号位为1,则表示为1 111 1111。
反码:按照负数反码的表示方式规则,可得出 -127 的反码表示为 1 000 0000。
补码:按照负数的补码表示方式规则,可得出 -127 的补码表示为 1 000 0001。
这里解答一个遇见过的莫名其妙的疑问
在计算机中,数值一律用 “ 补码 ” 来表示和存储。
所以当问一个数字用二进制怎么表示时,问的是这个数字的补码的表现形式!
也就是说,当问-127用二进制怎么表示,回答的是: 1 000 0001,而不是 1 111 1111。
那为什么问127的二进制表示方式时,回答的是0 111 1111呢?你以为回答的是原码?不!其实回答的就是补码,因为正数的补码和原码长得一样!🙄
最后说一下关于 8位byte类型,二进制范围为什么是 -128 ~ 127
计算机编码领域:计算机最小的存储单位是字节(8位二进制编码数),所以以上的其实都是针对8位byte类型来说的。
1000 0000,为什么不是128,而是 -128呢,这其实是由于8位byte类型中定义了最高位为符号位而决定的,当数字达到127后,再大就没有进位了,所以最大数值被限制在了127。
因此,8位byte类型的范围值就是 -128 ~ 127 了。
16位二进制表示
128:0000 0000 1000 0000
-128:1000 0000 1000 0000