gpt4 book ai didi

c++ - unsigned int 的位移,为什么是负数?

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:05:33 25 4
gpt4 key购买 nike

代码:

unsigned int i = 1<<31;
printf("%d\n", i);

为什么输出是-2147483648,一个负值?


更新的问题:

#include <stdio.h>

int main(int argc, char * argv[]) {
int i = 1<<31;
unsigned int j = 1<<31;
printf("%u, %u\n", i, j);
printf("%d, %d\n", i, j);

return 0;
}

上面的打印:

2147483648, 2147483648
-2147483648, -2147483648

那么,这是否意味着 signed int 和 unsigned int 具有相同的位值,不同之处在于将其转换为数字值时如何处理第 31 位?

最佳答案

%d 打印 unsigned int iint 版本。为 unsigned int 尝试 %u

printf("%u\n", i);

int main(){
printf("%d, %u",-1,-1);
return 0;
}

输出:-1, 4294967295

即有符号整数的存储方式以及如何将无符号整数转换为有符号整数或反之亦然。关注this .

要回答您更新的问题,它是系统如何表示它们,即以 2 的补码表示(如上述情况 -1 =2 的 1 补码 = 4294967295

关于c++ - unsigned int 的位移,为什么是负数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27616603/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com