首先,我一直在寻找无符号整数中负输入的结果,但无法找出它是如何转换的。例如-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;
}
答案 0 :(得分:0)
分配负数与分配0并减去该数字相同。当这个减法发生时,你的数字会溢出并变得巨大;
如果x是你可以存储的更大的数字,x + 1 = 0(溢出并在循环中转移),这意味着当你在无符号数字中执行0 - 1时,你实际上得到的是最大数字你可以存储。
只有当您减去0或超出最大数量时,事物的行为才会有所不同。之后,这些数字将与其他数字一样。
答案 1 :(得分:0)
好的,我们一行一行..
1。 unsigned int num1 = 3, num2 = -2;
表示num2 = -2 ;
它将显示为值的正整数
max unsigned integer - 1(值取决于计算机体系结构和编译器)。
就像你指定num2 = X(比如),存储的值是MAX_UNSIGNED_VALUE - (X-1)。
基本上它会将表示-X(以2的补码)的位模式分配给unsigned int。这将是一个很大的无符号值。对于32位整数,这将是2 ^ 32 - (X + 1)。
接下来的行
num2 = -2147483648;
所以我考虑32位int它将存储(unsigned int的最大值 - 2147483647)。
num2 =(4294967295-2147483647)= 2147483648
在以下文章中给出了关于如何发生这种转换的非常详细的解释。
希望这有帮助!