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

标签 c int unsigned negative-number

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

相关文章:

c - 将值列表传递到内核空间

c++ - 编译器如何选择给 auto 赋值?

Java - char、int 转换

c++ - 如何判断一个项目是c还是c++项目?

c - % 和 之间的数字的含义。在 printf ("%5.2f", 123456.987654)

c++ - 签名到未签名的类型转换

c++ - Windows 上无符号 __int64 的 printf 格式

c - C 中的有符号和无符号整数

c - 如何为 char 字符串中的位获取和设置位?

java - 将字符串 "1 + 2"转换为整数