首先,我一直在寻找无符号整数中负输入的结果,但无法找出它是如何转换的。例如-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/