gpt4 book ai didi

c - C 中的无符号整数打印不正确

转载 作者:行者123 更新时间:2023-12-02 08:38:46 38 4
gpt4 key购买 nike

使用以下代码,我声明了一个无符号整数并为其赋值 236。然后我取它的 1 的补码并将其赋值给一个单独的变量。当用 printf 打印时,我希望第二个变量打印为“19”,但打印为“4294967059”。为什么? ~ 按位运算符不是采用第一个变量的值(基数 2)并“翻转”位(1 的补码),从而在基数 10 中产生“19”吗?我机器上的整数是 32 位的,我认为这与 2^32-1 (4294967295) 有关,但我还没弄清楚

unsigned a = 236; // binary of this 11101100 = 236 base 10
unsigned b = ~a; // 1's complement to 00010011 = 19 base 10
printf("a: %u b: %u",a,b); // prints 236 and 4294967059. WHY?

最佳答案

a 的二进制是 00000000 00000000 00000000 11101100 如果 unsigned int 是 4 个字节长。 ~a11111111 11111111 11111111 00010011,即 4294967295。

您可以使用 unsigned char 来表示单个字节(很可能是 8 位)。

unsigned char a = 236;
unsigned char b = ~a; // b = 19

关于c - C 中的无符号整数打印不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18669735/

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