深入理解c语言——char的范围为什么是-128-127而不是-127-127

🎯 365365bet体育在线 📅 2025-10-11 03:11:19 👤 admin 👀 8411 ❤️ 533
深入理解c语言——char的范围为什么是-128-127而不是-127-127

看到题目,可能朋友会问了,“这么幼稚的问题你也有?”。那我来问你,为什么?你可千万别说是书上有的,已经规定了,那我劝你还是绕道吧。呵呵,继续。

我认为char型变量的最小值应该是1111 1111,也就是-127,可是书上怎么都说其最小值是-128?

对于多数编译器而言(包括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

🎯 相关推荐

《模拟山羊3》奖杯奖励位置
🎯 速发国际365的最新网站

《模拟山羊3》奖杯奖励位置

📅 10-01 👀 4988
秦始皇因何而死?
🎯 义乌365便民中心电话

秦始皇因何而死?

📅 07-13 👀 220

🎁 合作伙伴