计算机系统内部的数值计算都是通过补码运算实现的。
包括 各种位运算 等等。。
补码:正数的补码就是其原码,负数的补码是其 原码取反+1
例:3 原码表示:0000 0000 0000 0011
补码表示:0000 0000 0000 0011
-3 原码表示:1000 0000 0000 0011
补码表示:1111 1111 1111 1100 + 1 (对于负数,补码=原码取反+1,符号位不变)
-> 1111 1111 1111 1101
位运算之按位或‘ ~ ’:原理是“是1则0,是0则1”
3补码:0000 0000 0000 0011
取反:1111 1111 1111 1100 得到某个负数x的补码
转化成负数x的原码,先让补码减 1 得到:
1111 1111 1111 1011 然后取反得:
1000 0000 0000 0100 所以 x = -4,即 ~3 = -4
位运算之按位或‘ & ’:原理是“同为1则1,否则为0”
求12 & -12的值
12的补码:0000 0000 0000 1100
-12的补码:1111 1111 1111 0100
12 & -12的补码:0000 0000 0000 0100 得到某个正数x的补码
直观得 x = 4; 即 12 & -12 的值为1;
含义:x&(-x)得到的是 x 取二进制1的最末位所表示的值
位运算之按位或‘ | ’:原理是“有1则1,否则为0”
14的原码:0000 0000 0000 1110
14的补码:0000 0000 0000 1110 (1)
-14的原码:1000 0000 0000 1110
-14的补码:1111 1111 1111 0001 + 1 =
1111 1111 1111 0010 (2)
14 | -14 =(1)|(2)
得到补码:1111 1111 1111 1110
转化成原码(减1取反):1000 0000 0000 0010 值为-2;
位运算之按位异或‘ ^ ’:原理是“不同则1,相同为0”
14的原码:0000 0000 0000 1110
14的补码:0000 0000 0000 1110 (1)
-14的原码:1000 0000 0000 1110
-14的补码:1111 1111 1111 0001 + 1 =
1111 1111 1111 0010 (2)
14 ^ -14 =(1)^(2)
得到补码:1111 1111 1111 1100
转化成原码(减1取反):1000 0000 0000 0100 值为-4;
包括 各种位运算 等等。。
补码:正数的补码就是其原码,负数的补码是其 原码取反+1
例:3 原码表示:0000 0000 0000 0011
补码表示:0000 0000 0000 0011
-3 原码表示:1000 0000 0000 0011
补码表示:1111 1111 1111 1100 + 1 (对于负数,补码=原码取反+1,符号位不变)
-> 1111 1111 1111 1101
位运算之按位或‘ ~ ’:原理是“是1则0,是0则1”
3补码:0000 0000 0000 0011
取反:1111 1111 1111 1100 得到某个负数x的补码
转化成负数x的原码,先让补码减 1 得到:
1111 1111 1111 1011 然后取反得:
1000 0000 0000 0100 所以 x = -4,即 ~3 = -4
位运算之按位或‘ & ’:原理是“同为1则1,否则为0”
求12 & -12的值
12的补码:0000 0000 0000 1100
-12的补码:1111 1111 1111 0100
12 & -12的补码:0000 0000 0000 0100 得到某个正数x的补码
直观得 x = 4; 即 12 & -12 的值为1;
含义:x&(-x)得到的是 x 取二进制1的最末位所表示的值
位运算之按位或‘ | ’:原理是“有1则1,否则为0”
14的原码:0000 0000 0000 1110
14的补码:0000 0000 0000 1110 (1)
-14的原码:1000 0000 0000 1110
-14的补码:1111 1111 1111 0001 + 1 =
1111 1111 1111 0010 (2)
14 | -14 =(1)|(2)
得到补码:1111 1111 1111 1110
转化成原码(减1取反):1000 0000 0000 0010 值为-2;
位运算之按位异或‘ ^ ’:原理是“不同则1,相同为0”
14的原码:0000 0000 0000 1110
14的补码:0000 0000 0000 1110 (1)
-14的原码:1000 0000 0000 1110
-14的补码:1111 1111 1111 0001 + 1 =
1111 1111 1111 0010 (2)
14 ^ -14 =(1)^(2)
得到补码:1111 1111 1111 1100
转化成原码(减1取反):1000 0000 0000 0100 值为-4;