深入理解c语言——char的范围为什么是-128到127而不是-127到127
2011-10-25 16:56
741 查看
对于多数编译器而言(包括VC++),char 都视作 signed char来处理,这时 char 的取值范围得与二进制编码技术有关,对于补码表示法。char 的取值范围是 -128 - 127, 对于符号绝对值编码法、反码记法, char 的取值范围是 -127 - 127。char 有 8 位,最高位是符号位,所以 char可以在 -127 - 127 取值是没有疑问了。
当最高位是 1,其余位都是 0 时,按照补码表示法的规则,这个数应该是 负数了,用求负数的二进制的方法反推回去:
二进制: 1000 0000
减一: 0111 1111
逐位取反: 1000 0000 //和原来的二进制形式一样,对应正整数 128
经过这一系列操作之后,二进制形式依然是 1000 0000,对应 数值 128,但这个数是负数,因为反推前 最高位是 1 的,故对应 -128。
其他的整数类型 short 、int 、long 也可以这样推导。
我们的机器多数是基于补码表示的
11111111 = -1
10000000 = -128
现在证明 10000000 表示的是 -128而不是-0
10000000 + 00000001 = 10000001 = -127
显然 -128 + 1 = -127
11111111 符号位为1表示负数
将数值位按位取反加一得到
0000000+1 = 0000001
所以 11111111 = -1
当最高位是 1,其余位都是 0 时,按照补码表示法的规则,这个数应该是 负数了,用求负数的二进制的方法反推回去:
二进制: 1000 0000
减一: 0111 1111
逐位取反: 1000 0000 //和原来的二进制形式一样,对应正整数 128
经过这一系列操作之后,二进制形式依然是 1000 0000,对应 数值 128,但这个数是负数,因为反推前 最高位是 1 的,故对应 -128。
其他的整数类型 short 、int 、long 也可以这样推导。
我们的机器多数是基于补码表示的
11111111 = -1
10000000 = -128
现在证明 10000000 表示的是 -128而不是-0
10000000 + 00000001 = 10000001 = -127
显然 -128 + 1 = -127
11111111 符号位为1表示负数
将数值位按位取反加一得到
0000000+1 = 0000001
所以 11111111 = -1
相关文章推荐
- C语言中 char 类型的取值范围为什么是-128~127
- 浅析为什么char类型的范围是-128~+127
- 八位二进制数为什么表示范围(-128~~+127)理解
- 带符号的char类型取值范围为什么是-128——127
- 探究:java中的char的取值范围,为什么是-128到127?
- 浅析为什么char类型的范围是 —128~+127
- 数据类型:整数最小值为何不是最大值的相反数(为什么八位二进制数表示范围是:-128~127 ) ?
- 浅析为什么char类型的范围是 —128~+127
- 浅析为什么char类型的范围是 —128~+127 .
- 浅析为什么char类型的范围是 —128~+127
- 浅析为什么 char 类型的范围是 : -128~+127
- 浅析为什么char类型的范围是 —128~+127
- 为什么char类型的范围是:-128~+127
- 带符号的char类型取值范围为什么是-128——127
- [转载]浅析为什么char类型的范围是 —128~+127
- 浅析为什么 char 类型的范围是 : -128~+127
- 浅析为什么char类型的范围是 -128~127
- 浅析为什么char类型的范围是 —128~+127
- 浅析为什么char类型的范围是 —128~+127
- 带符号的char类型取值范围为什么是-128——127