gpt4 book ai didi

c - 为什么声明为 unsigned int 的变量会生成负值?

转载 作者:太空宇宙 更新时间:2023-11-04 00:17:49 24 4
gpt4 key购买 nike

我编写这段代码是为了了解移位。令我惊讶的是,即使我将 x 声明为 unsigned int,但输出包含一个负数,即最左边的位设置为 1 时。我的问题:为什么?我认为 unsigned int 从来都不是负数。根据 sizeof(x)x 为 4 字节宽。

这是代码片段:

int main(void)
{
unsigned int x;

x = 1;

for (int i = 0; i < 32; i++)
{
printf("2^%i = %i\n", i, x);
x <<= 1;
}


return 0;
}

这是输出:

2^0 = 1
2^1 = 2
2^2 = 4
2^3 = 8
2^4 = 16
2^5 = 32
2^6 = 64
2^7 = 128
2^8 = 256
2^9 = 512
2^10 = 1024
2^11 = 2048
2^12 = 4096
2^13 = 8192
2^14 = 16384
2^15 = 32768
2^16 = 65536
2^17 = 131072
2^18 = 262144
2^19 = 524288
2^20 = 1048576
2^21 = 2097152
2^22 = 4194304
2^23 = 8388608
2^24 = 16777216
2^25 = 33554432
2^26 = 67108864
2^27 = 134217728
2^28 = 268435456
2^29 = 536870912
2^30 = 1073741824
2^31 = -2147483648

最佳答案

只要使用正确的转换符号

printf("2^%u = %u\n", i, x);

关于c - 为什么声明为 unsigned int 的变量会生成负值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44895271/

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