gpt4 book ai didi

c - 将负 int 值存储在无符号位中并从中减去

转载 作者:行者123 更新时间:2023-11-30 17:26:51 25 4
gpt4 key购买 nike

首先,我一直在寻找无符号整数中负输入的结果,但无法找出它是如何转换的。例如-3。 -3 看起来怎么样?它是如何变成这样的?

从中减去怎么样?

会发生什么?

#include <stdio.h> 

int main(){
unsigned int num1 = 3, num2 = -2;

printf("num1's initial value is %u.\n",num1);
printf("num2's initial value is %u.\n",num2);

num1 = num1 + 1;
num2 = num2 - 1;

printf("num1's value is now %u.\n",num1);
printf("num2's value is now %u.\n",num2);

num1 = 2147483647;
num2 = -2147483648;

printf("num1's value is now %u.\n",num1);
printf("num2's value is now %u.\n",num2);

num1 = num1 + 1;
num2 = num2 - 1;

printf("num1's value is now %u.\n",num1);
printf("num2's value is now %u.\n",num2);

return 0;
}

最佳答案

好吧,让我们逐行进行..

1. 无符号整数 num1 = 3,num2 = -2;

for num2 = -2 ; 它将显示为值的正整数最大无符号整数 - 1(值取决于计算机体系结构和编译器)。

就像您分配 num2 = X(比如说)一样,存储的值将为 MAX_UNSIGNED_VALUE - (X-1)。

基本上它将把代表 -X(2 的补码)的位模式分配给 unsigned int。这将是一个很大的无符号值。对于 32 位整数,这将是 2^32 - (X+1)。

下一行

num2 = -2147483648;

所以我正在考虑 32 位 int 它将存储(无符号 int 的最大值 - 2147483647)。那就是

num2 = (4294967295-2147483647) = 2147483648

以下文章中给出了有关此转换如何发生的非常详细的解释。

希望这有帮助!

关于c - 将负 int 值存储在无符号位中并从中减去,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26609090/

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