鱼C论坛

 找回密码
 立即注册
查看: 960|回复: 5

[已解决]int定义时超出取值范围的问题

[复制链接]
发表于 2020-7-23 22:07:58 | 显示全部楼层 |阅读模式

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

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

x
部分代码如下
int a = pow(2,32) - 1
printf("a = %d\n",a);

输出结果为2的31次方-1
问题是int数据类型为32位有符号数在定义时就超出了取值范围应该如何运算?
我的思路是pow(2,32)-1在计算机看来就是 1111 1111 1111 1111 1111 1111 1111 1111
可这按照有符号十进制输出应该为-1,和程序的运行结果是不同的,不知道我的思路是哪里出了错误,还请各位指出。
最佳答案
2020-7-23 23:03:35
int是有符号整型,最高位是符号位,其范围是-2^31~2^31-1
当你把pow(2,32)-1赋值给int类型的a的时候,实际上赋值给a的是0X7FFF, 二进制是0b0111 1111 1111 1111 1111 1111 1111 1111,最高位是符号位,剩余的才是数据位,
你若将pow(2,32)-1赋值给unsigned int 则会得到0XFFFF,二进制是0b1111 1111 1111 1111 1111 1111 1111 1111
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-7-23 22:16:17 | 显示全部楼层
1q23w31 发表于 2020-7-23 22:11
python中当你的数值小于int范围的时候,就是int变量,当大于int范围的时候,就是long类型了。在python中当 ...

铁子这不是python是c啊,再说就算是python那输出的结果也应该是2的32次方-1,而不是2的31次方-1吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-23 22:54:55 | 显示全部楼层
1q23w31 发表于 2020-7-23 22:11
python中当你的数值小于int范围的时候,就是int变量,当大于int范围的时候,就是long类型了。在python中当 ...

都2020了还Py2呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-23 23:03:35 | 显示全部楼层    本楼为最佳答案   
int是有符号整型,最高位是符号位,其范围是-2^31~2^31-1
当你把pow(2,32)-1赋值给int类型的a的时候,实际上赋值给a的是0X7FFF, 二进制是0b0111 1111 1111 1111 1111 1111 1111 1111,最高位是符号位,剩余的才是数据位,
你若将pow(2,32)-1赋值给unsigned int 则会得到0XFFFF,二进制是0b1111 1111 1111 1111 1111 1111 1111 1111
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-24 07:44:29 | 显示全部楼层
sunrise085 发表于 2020-7-23 23:03
int是有符号整型,最高位是符号位,其范围是-2^31~2^31-1
当你把pow(2,32)-1赋值给int类型的a的时候,实际 ...

请问是通过什么样的运算进行赋值的呢?符号位为什么会是0呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-24 09:20:46 | 显示全部楼层
lizhe123 发表于 2020-7-24 07:44
请问是通过什么样的运算进行赋值的呢?符号位为什么会是0呢?

这是规定。有符号整型的最高位就是符号位,0表示正数,1表示负数。
请问是通过什么样的运算进行赋值的呢?

通过你写的赋值语句赋值的啊
a = pow(2,32) - 1
这不是赋值么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-13 10:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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