数据类型中char是什么型(为什么char类型的数值范围是-128)

本文针对x86架构体系而言----------------------------------------,下面我们就来说一说关于数据类型中char是什么型?我们一起去了解并探讨一下这个问题吧!

数据类型中char是什么型(为什么char类型的数值范围是-128)

数据类型中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

    分享
    投诉
    首页