char类型的取值范围

char类型的取值范围,第1张

char buf[100] = {128},此时buf里的第一个元素值为128,当你用"%s"输出buf时,整个buf会被当作一个字符串,第一个字符的ASCII码为128,后面均为空字符。

char buf2[100] = "128",此时buf2被当做"128"这个字符串,所以输出为"128"。

char c=128,由于128超出了char的表示范围,发生溢出,就变成了-128。

我觉得你以前编过VB。

1,char类型是8位,最高位是符号位,0正1负,所以01111111是127。

2,-127是10000001,而10000000换算过来就是-128。

1, “一个n位有符号int型数值,其范围为-2^(n-1) ——2^(n-1) -1”。导致此情况的根本原因是“人们解决问题时,习惯以人的思维思考问题。

2,计算机本身确实以机器的思维进行处理的”。就表现为“计算机对数据的处理其实是以‘补码’的形式,而非日常生活中人们进行数学运算所采用的‘原码’的形式”,但是,人们在对“此数值范围”进行处理的时候,却习惯性的采用了“原码作为机器码”。

3,针对“数值”计算,计算机先后采用过3种机器码——原码、反码和补码。 原码 ,最高位为符号位,其余为对应数值的绝对值的二进制数值表示。反码,最高位为符号位,正数=原码 ,负数=符号位+原码对应的其他位数取反。补码, 最高位为符号位,正数=原码 , 负数=反码+1。

4,符号位“0为+,1为-”。 因为,计算机为数据类型分配了n位,超过n位的数值会被自动舍弃,就可以发现,现在计算机系统中采用的补码,克服了“原码中存在+0和-0”的情况,仅表现为一个0。

5,8位有符号位数值的范围就成为了“-2^(8-1) ——2^(8-1) -1”,即“-128——+127”。“计算机为有符号int型数值分配固定的位数n存储数据,当数据位数大于n时,大于n的位数被自动舍弃”。这就是导致数值范围为“-2^(n-1) ——2^(n-1) -1”的原因。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/sjk/6769457.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-28
下一篇 2023-03-28

发表评论

登录后才能评论

评论列表(0条)

保存