|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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,和程序的运行结果是不同的,不知道我的思路是哪里出了错误,还请各位指出。
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
|
|