1、原码
原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值. 比如如果是8位二进制:
[+3]原 = 0000 0011
[-3]原 = 1000 0011
第一位是符号位. 因为第一位是符号位, 所以8位二进制数的取值范围就是:
[1111 1111 , 0111 1111]==>[-127 , 127]
2、反码
反码的表示方法是:
- 正数的反码是其本身
- 负数的反码是在其原码的基础上, 符号位不变,其余各个位取反.
[+3] = [0000 0011]原 = [0000 0011]反
[-3] = [1000 0011]原 = [1111 1100]反
3、补码
补码的表示方法是:
- 正数的补码就是其本身
- 负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)
[+3] = [0000 0011]原 = [0000 0011]反 = [0000 0011]补
[-3] = [1000 0011]原 = [1111 1100]反 = [1111 1101]补
4、取反运算符
- 十进制,数字10
二进制原码即补码 0000 1010 直接存储
~10后原码(补码)变为 1111 0101
由于他的符号位是1,系统认为这是一个负数的补码
负数输出时,先将补码减一得1111 0100,再取反得1000 1011
换算成十进制就是-11了
- 十进制,数字-5
二进制原码 1000 0101
取补码(还记得负数补码吗?符号位不变,原码取反再加一) 1111 1011
~(-5),即取反后得 0000 0100
由于他的符号位是0,系统认为这是一个正数的补码
正数补码即原码,最终输出0000 0100
换算成十进制就是4了
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)