所以今天我正在学习有符号和无符号变量。所以我可以得出的结论是,signed可以有正值,负值和零值,而unsigned只能有正值。 所以通过代码尝试这个我在c:
中编写了这个程序#include <stdio.h>
#include <stdlib.h>
void main()
{
int a=-10;
unsigned int x=-4;
printf("signed variable value is : %d\n Unsigned variable value is : %u",a,x);
}
根据我的预期输出应该是这样的:
signed variable value is : -10 Unsigned variable value is : 4
但实际上事实证明是这样的:
signed variable value is : -10 Unsigned variable value is : 4294967292
任何人都可以解释这个!!
答案 0 :(得分:1)
如果您将一个负值分配到unsigned int
并使用格式说明符%u
进行打印,则会考虑该数字的2个补码。
/>
因此x
成为-4的补充,即4294967292
答案 1 :(得分:0)
unsigned
变量的工作方式是它们绕过0(前后两个),将0视为2 32 (在32位系统上) 。要查看此内容,请尝试以下程序:
#include <stdio.h>
int main()
{
unsigned int test = 3;
for (int i = 0; i < 10; ++i)
{
test = test - 1;
printf("%u\n", test);
}
}
输出(在32位系统上):
2
1
0
4294967295
4294967294
4294967293
4294967292
4294967291
4294967290
4294967289
返回您的代码。 -4
当然与0 - 4
相同,所以你得到的是此列表中0
之后的第四个项目。
NB。除了void main
之外,您的代码没有任何错误答案 2 :(得分:-2)
无符号变量不会为您取绝对值。
由于您在其中添加了负值,因此它将有符号整数值(-4)转换为4字节无符号变量。
我猜这里将负值存储为1的补码。因此,你在无符号4byte变量上得到的-4实际上是2 ^ 32 -4(一个环绕):4294967292