数据类型中char是什么型(为什么char类型的数值范围是-128)
本文针对x86架构体系而言----------------------------------------,下面我们就来说一说关于数据类型中char是什么型?我们一起去了解并探讨一下这个问题吧!
数据类型中char是什么型
本文针对x86架构体系而言
----------------------------------------
我们知道在c语言中,char类型是8位二进制的有符号类型,最高位为符号位,剩下的7位表示数值,而7位能表示的最大值为127,所以第一直觉是char类型的范围应该是-127~ 127。但如果是-127~ 127的话,那0就有两种表示了:
假如用源码表示0的话,二进制就是:0000 0000 和1000 0000, 也就是有正零,负零,有点诧异,还有点浪费空间...
那能不能用其中的一个0来表示-128呢?当然可以!而且必须用二进制1000 0000来表示(0000 0000就表示0了,天时地利人和)
这就有了-128的一席之地了:
0000 0001 1
0000 0000 0
1000 0000 -128
1000 0001 -1
1000 0002 -2
但是看看这个坑占的,简直太突兀了,还是不要-128算了!而且如果-1>-2,那么他们映射的二进制1000 0001 也应该自然地大于 1000 0002,这样比较才是效率最高的,而不需要更高一层的定义。
别急别急,如果用补码,那正负的范围值就如丝般顺滑了(论补码的妙哉,哈哈):
注:有符号整数X,如果值大于等于0,则补码就是原码,如果小于0,则为2^n X
0000 0001 1
0000 0000 0
1000 0000 -128
1000 0001 -127
.........
1111 1111 -1
重新排列一下,就更符合自觉,更直观了,而且我们发现有符号无符号整数的二进制是一样的,关键就在于上层语言怎么解释了,比如1111 1111可以是255,也可以是-1。所以有无符号,纯粹就是上层语言怎么定义了。
0000 0000 0
0000 0001 1
...
0111 1111 127
1000 0000 -128
1000 0001 -127
....
1111 1111 -1
其他short, int,long long一样一样的,公式为:-2^(n-1) ~ 2^(n-1) - 1
,免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com