前言:
目前同学们对“c语言中int和char型取值范围”可能比较看重,同学们都需要了解一些“c语言中int和char型取值范围”的相关资讯。那么小编也在网上收集了一些有关“c语言中int和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 10000 0000 01000 0000 -1281000 0001 -11000 0002 -2
但是看看这个坑占的,简直太突兀了,还是不要-128算了!而且如果-1>-2,那么他们映射的二进制1000 0001 也应该自然地大于 1000 0002,这样比较才是效率最高的,而不需要更高一层的定义。
别急别急,如果用补码,那正负的范围值就如丝般顺滑了(论补码的妙哉,哈哈):
注:有符号整数X,如果值大于等于0,则补码就是原码,如果小于0,则为2^n + X
0000 0001 10000 0000 01000 0000 -1281000 0001 -127.........1111 1111 -1
重新排列一下,就更符合自觉,更直观了,而且我们发现有符号无符号整数的二进制是一样的,关键就在于上层语言怎么解释了,比如1111 1111可以是255,也可以是-1。所以有无符号,纯粹就是上层语言怎么定义了。
0000 0000 00000 0001 1...0111 1111 1271000 0000 -1281000 0001 -127....1111 1111 -1
其他short, int,long long一样一样的,公式为:-2^(n-1) ~ +2^(n-1) - 1
标签: #c语言中int和char型取值范围