c语言寻找C位数?

。但为什么是这样的范围,我们从没有深究过,这篇博文将对此进行深入的讲解,希望能加深你对这些类型范围的了解。

char的大小为一个字节,八个比特位,我们就从0开始,那char的二进制补码先是
这时的char是255,再加1结果是
- 这个数是负数,首先它是不能计算的,我们不用转换它成原码,计算机直接把它解析成-128
- 这个数转换成原码是,十进制是-127
- 原码是-1,再加1得到的就是0了。综上我们可以用一个圆来表示char能存储的数值

不理解没关系,我画个图来说明char从0开始不断地加1这个过程


这里我们可以得出结论,char从0开始不断地加1,会陷入循环,

因此得到结论signed char中能存储的数据范围是-128 ~ 127,我们可以通过limits.h文件验证我们的说法



这是上篇博客中提到的一题,现在对这题是不是有更深的理解了?

字符数组a从-1到-128,再减1得到127,127到1,最后到0。字符串遇到\0(\0的ASCII码值是0)停止,所以字符串长度是-1 ~ -128,1 ~ 127,之间的数字个数,求出的长度就是255。


对最后的加1得到0,又循环回去了。

两个f就是255,也是二进制的8个1。



同样也是上篇博客中提到的题目,正是因为对unsigned char不断地加1会陷入0~255再到0 ~ 255这样的循环,使得i总是满足i <= 255这个条件,所以hello world会不断地在屏幕上输出。


对short的0不断加1,这个过程和char一样,只是因为short有16个bit位,所以short最大的数是11111,转换成十进制是32767,再加1是00000,计算机直接把它解析成-32768…

后续的过程和char一样,我就不再赘述。由此我们得出结论,signed short能存储的数据范围是-32768 ~ 32767。

由于是无符号数,不用单独解析最高位的符号位,直接把二进制序列转换成十进制,当16位bit都是1时,十进制就是
所以unsigned char能存储的数据范围是0 ~ 65535,在limits.h文件中是十六进制的f f f f,根据上图的HEX一行,也能验证我们的说法是对的。


8个f,从计算机的HEX中看出,我们的说法是正确的。


好了,相信你对char,short,int三中基本类型存储范围的了解已经很透彻了,希望这篇博客能对你有帮助。

}

我要回帖

更多关于 c语言中%s和%c 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信