AnT*_*AnT 14
在8位2的补数编码-128,并+128具有相同的表示:10000000.因此,硬件设计者面临着一个明显的困境:如何解释位模式10000000.在形式上,它将以任何一种方式工作.如果他们决定将其解释为+128,则结果范围将是-127..+128.如果他们决定将其解释为-128,则结果范围将是-128..+127.
在实际的2的补码表示中,选择后一种方法是因为它满足以下很好的约定:所有1在高阶位中的位模式代表负数.
值得注意的是,语言规范不要求二进制补码实现将100...0位模式视为任何有符号整数类型中的有效值.例如,允许实现将8位限制signed char为-127..+127范围并且将其10000000视为无效位组合(陷阱表示).
我认为一个简单的方法来解释这个共同的灵魂是:
的位是一个值0或1,或2点的可能性
A 2位保持两个组合或0和1用于四个可能的值:00,01,10,和11.
3位保存三种组合,总共有八种可能的值:000to 111.
因此,n位保持n个组合,总共2 ^ n个可能的值.因此,8位值是2 ^ 8 = 256个可能的值.
对于有符号数,最高有效位(第一个从左到右读取值)是符号位; 这留下了2 ^(n-1)个可能值的可能性.对于8位有符号数,对于每个符号,这是2 ^ 7 = 128个可能的值.但由于正号包括零(0到127 = 128个不同的值,而128 + 128 = 2 ^ 8 = 256),因此对于128个不同的值,负号包括-1到...... -128.地点:
10000000 = -128
...
11111111 = -1
00000000 = 0
...
01111111 = 127
Run Code Online (Sandbox Code Playgroud)