lizhe123 发表于 2020-7-23 22:07:58

int定义时超出取值范围的问题

部分代码如下
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,和程序的运行结果是不同的,不知道我的思路是哪里出了错误,还请各位指出。

lizhe123 发表于 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吧

永恒的蓝色梦想 发表于 2020-7-23 22:54:55

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

都2020了还Py2呢

sunrise085 发表于 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

lizhe123 发表于 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呢?

sunrise085 发表于 2020-7-24 09:20:46

lizhe123 发表于 2020-7-24 07:44
请问是通过什么样的运算进行赋值的呢?符号位为什么会是0呢?

这是规定。有符号整型的最高位就是符号位,0表示正数,1表示负数。
请问是通过什么样的运算进行赋值的呢?
通过你写的赋值语句赋值的啊
a = pow(2,32) - 1这不是赋值么
页: [1]
查看完整版本: int定义时超出取值范围的问题