鱼C论坛

 找回密码
 立即注册
查看: 734|回复: 2

[已解决]数据类型取值范围的疑问

[复制链接]
发表于 2020-11-18 13:56:29 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
如下图,最值问题中。我想问下数据类型取值范围是人为规定的吗?
要是不是。在不同位数的操作系统中(就如32位和64位系统),要怎么求取,就像下面习题中的pow(2,sizeof(int)*8)/2-1,这跟进制转换中的二进制转换成十进制(2^(字位)-1)相似。
这是存在什么联系吗?取值范围是二进制转换为十进制的范围吗?要是这样,就如在32位系统中,那不是有32位(bit)的二进制,计算公式不应该是2^32-1吗?
太多疑惑,求解答。(没有学到指针,表达不清,请谅解)
最佳答案
2020-11-18 14:58:12
你的理解基本正确,在32位系统中int类型数据的确是32位,int类型数字的总个数应该是2^32个。int类型有正有负,所以不会出现2^32-1,他的范围是-2^31~2^31-1,就是程序中给出的范围,sizeof的作用是计算int类型占几个字节,int占32位位4个字节。
屏幕截图 2020-11-08 233456.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-11-18 14:58:12 | 显示全部楼层    本楼为最佳答案   
你的理解基本正确,在32位系统中int类型数据的确是32位,int类型数字的总个数应该是2^32个。int类型有正有负,所以不会出现2^32-1,他的范围是-2^31~2^31-1,就是程序中给出的范围,sizeof的作用是计算int类型占几个字节,int占32位位4个字节。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-18 15:20:27 | 显示全部楼层
本帖最后由 jackz007 于 2020-11-18 15:31 编辑

        32 位意味着 32 个二进制位,每个位有 0 和 1 两种状态,那么,32 个二进制位总共有 2 ^ 32 种排列方式,也就是说,如果用来表达数值,那么就是 2 ^ 32 个互不相同的数值。二进制数本身是有大小的,如果不考虑符号,最小的整数是 0,那么最大的数值就是 2 ^ 32 - 1。如果考虑符号,那么,32个二进制位中,第32位(最高位)会被抽取,用作符号位,那么,对正、负数的表达空间各占 2 ^ 31 个数值。正数对应于 0 至 2 ^ 31 - 1,负数对应于 -1 至 -(2 ^ 31),正负数的数值个数加在一起正好是 2 ^ 32 。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-20 17:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表