为什么char类型的范围是-128 ~ +127 浅析为什么char类型的范围是 —128~+127

在C语言中, signed char 类型的范围为-128~127,每本教科书上也这么写,但是没有哪一本书上(包括老师)也不会给你为什么是-128~127,这个问题貌似看起来也很简单容易, 以至于不用去思考为什么,不是有一个整型范围的公式吗:  -2^(n-1)~2^(n-1)-1   n为整型的内存占用位数,所以int类型32位 那么就是 -(2^31)~2^31 -1 即 -2147483648~2147483647,但是为什么最小负数绝对值总比最大正数多1 ,这个问题甚至有的工作几年的程序员都模棱两可,因为没有深入思考过,只知道书上这么写。。于是,我不得不深入思考一下这个被许多人忽视的问题。。

    对于无符号整数,很简单,全部位都表示数值,比如 char型,8位,用二进制表示为0000 0000 ~ 1111 1111

  1111 1111 最大即为十进制255,所以 unsigned char 的范围为0~ 255,在这里普及一下2进制转十进制的方法, 二进制每一位的数值乘以它的位权(2^(n-1),n为自右向左的位),再相加,可得到十进制数,比如 :

1111 1111 =1*2^7+1*2^6+1*2^5+1*2^4+1*2^3+1*2^2+1*2^1+1*2^0=127  。

   但是对于有符号整数,二进制的最高位表示正负,不表示数值,最高位为0时表示正数,为1时表示负数,这样一来,能表示数值的就剩下(n-1)位了,比如 char a= -1;   那么二进制表示就为 1 0000001,  1 表示为0 0000001 ,所以signed char 型除去符号位剩下的7位最大为1111
111 =127,再把符号加上,0 1111111=127 ,1 1111111= -127,范围应该为 -127~127 ,同理int类型也一样,但是问题出来了,教科书上是-128~127 啊,下面就剖析一下这个惊人的奇葩。。。

    再普及一下计算机内部整数存储形式,大家都知道计算机内部是以二进制来存贮数值的,无符号整数会用全部为来存储,有符号的整数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值