为什么8位有符号数的取值范围是-128 ~127
计算机存储数据是以什么码(原码,反码,补码)存储的?为什么?带着问题一起探讨。
我们知道,有符号数的取值范围为:-2^(n-1) ~ 2^(n-1)-1 (其中n为数据位数),当n=8时,数据取值范围:-128 ~ 127
对于无符号类型n=8时,数据取值范围为: 0 ~255
正数的原码,反码,补码都相同,
数值 原码 反码 补码 符号位
0 0000 0000 0000 0000 0000 0000 0
1 0000 0001 0000 0001 0000 0001 0
... ...... .... ...
127 0111 1111 01111 1111 0111 1111 0
负数的原码,反码和补码不同,转化原理为:原码-------位取反(符号位不变)------->反码-------------+1----------->补码
数值 原码 反码 补码 符号位
-1 1000 0001 1111 1110 1111 1111 1
-2 1000 0010 1111 1101 1111 1110 1
... ...... .... ...
-126 1111 1110 1000 0001 1000 0010 1
-127 1111 1111 1000 0000 1000 0001 1
-128 xxxx xxxx xxxx xxxx 1000 0000 1
那么-128补码是多少了,从上面规律可以看出,-128的补码是1000 0000,反码 = 补码 - 1,则反码为0111 1111(最高位(第7位)向第8位借了一位),原码 = 反码取反,则原码为1000 0000(可以认为是-0),此时原码中的1是数据位不是符号位,其值为-128。
计算机中为什么要用补码存储数据?
计算机在做同号相减或异号相加时,若都为原码,计算非常复杂,符号位不能简单加减,需要根据两者的绝对值而定,若为补码,则不需要考虑这些因素,符号位可以直接作加减操作。
实验: