c语言里二进制数

15.1.2 有符号整数 有符号数的表示方法是由硬件决定, 而不是由 C 决定的. 或许表示有符号数最简单的方法就是保留 1 位 (比如高位) 来表示数的符号. 在一个 1 字节值中, 该方法为数字本身留下 7 位. 使用这样的符号量 (sign-magnitude) 表示法, 10000001 表示 -1, 00000001 表示 1. 那么整个范围是 -127 到 +127 二进制补码 (tow s-complement) 方法避免了这种问题, 是当今使用最普遍的系统. 我们将讨论这种方法于 1 字节值时的情况. 在这种情形下, 使用最后 7 位表示从 0 到 127 的值, 同时高位设置为 0. 这部分与符号量方法相同, 同样地, 如果高位是 1 , 那么该值为 负. 两种方法的区别在于确定该负数值的方法. 从一个 9 位组合 100000000 (256 的二进制形式) 中减去一个负数的位组合, 结果是该负数值的数量. 例如, 假设一个负数的位组合为 10000000. 作为一个无符号字节, 该组合为 127. 作为一个有符号的值, 该组合为负 (位 7 是 1 ), 并且值为 100000000 - 10000000, 即 10000000 (128). 因此, 该数为 -128 (在符号量表示法中该数为 -0). 与之类似, 10000001 是 -127, 11111111 是 -1. 该方法表示数的范围是 -128 到 +127. 要对一个二进制补码数取相反数, 最简单的方法是反转每一位 (将 0 变成 1 , 将 1 变成 0 ), 然后加 1. 因为 1 是 00000001, 所以 -1 是 11111110 + 1 , 即 11111111 , 和前面所看到的是一致的. 二进制反码 (one s - complement) 方法通过反转位组合中的每一位以形成一个数的负数. 例如, 00000001 是 1 , 11111110 是 -1 . 这种方法也有一个 -0: 11111111. 其范围是 (对于 1 字节值) 是 -127 到 +127 . 麻烦高手帮忙画个图他这里是如何算的? 是这样么? 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 4 8 16 32 64 128 -1 -2 -4 -8 -16 -32 -64

第1个回答  2020-02-24
计算机数据(整数类)有三个概念原码、
反码
、补码,而计算机实际应用中所用到的只有补码!
以一个字节(8bits)为例说明
原码:第一位为符号位,其余位表示数值,
如0
000
0001表示1
,1
000
0001表示-1
反码:正数原码即是其反码,负数反码为:符号位不动,其余位取反,即0变1,1变0,如:-1反=1
111
1110
补码:正数原码即是其补码,负数补码为反码+1,即-1补=1
111
1111
补码才是计算机中存储的数据形式!!原码、反码只是两个中间概念词,应用中用不到,是计算机发展过程中的中间产物。
相似回答