1. 概念
原码:数值的二进制表示形式;
计算中数字存储有正数和负数之分:统一用补码存储;
正数:最高位为0;如:00000101:+5
负数:最高位为1:如:10001010:-10
一个字节存储数值范围:(-128 - 127)
一个字节有八位,能存储的最大正数为01111111,其中首位0是符号位,表示数值为正;转换十进制数:127
一个字节能存储的最小负数的补码为10000000,10000000——>(求反码)——>11111111——>(求补码)——>1 00000000——>(化为十进制)——>-128(补码取反加1 = 原码)
反码:二进制码0变1,1变0叫做反码,反码用于原码补码之间的转换(符号位不变)
补码:用来做数据的存储运算
2. 运算规则
(原码 反码 补码之间的转换 , 符号位不要动)
正数: 原码 = 反码 = 补码
负数: 原码 = 补码取反加1(给补码求原码)
负数: 补码 = 原码取反加1(给原码求补码)
如:
[+1] = [00000001]原 = [00000001]反 = [00000001]补
[-1] = [10000001]原 = [11111110]反 = [11111111]补
[11111111]补 = [10000000]反 = [10000001]原码 = -1
3. 应用:取反运算符,按二进制位进行"取反"运算
如:负数 -6
-6的二进制原码:1000 0110
反码: 1111 1001
补码: 1111 1010
~取反: 0000 0101
所以结果是~(-6) = 5
如:正数 10
二进制原码即补码 0000 1010 直接存储
~取反:1111 0101
由于他的符号位是1,系统认为这是一个负数的补码
负数输出时,先将补码减一得反码:1111 0100;再取反原码:1000 1011
总结:
1.取反不区分符号位,全部位取反
2.取反含义是将计算机中存储的数值进行取反,取反后的结果还是补码,需要取原码输出。
3.正数,二进制原码即补码,直接取反
4.负数,计算机存储器补码,先求补码,将补码取反