#include<stdio.h>
#include<conio.h>
main()
{
int i=-5;
unsigned int j=i;
printf("%d",j);
getch();
}
O/p
-----
-5
#include<stdio.h>
#include<conio.h>
main()
{
int i=-5;
unsigned int j=i;
printf("%u",j);
getch();
}
O/p
===
4255644633
这里我没有收到任何编译错误。我们可以将整数与负数分配给无符号整数吗?
使用标识符%d打印时发出-5,使用%u打印时正在打印一些垃圾值。
我想知道的事情是
1)为什么用负数unsigned int类型分配整数时,编译器会忽略。
2)它如何将签名转换为无符号?
如果你打开警告,编译器会警告你,你正在分配一个签名给一个无符号。编译器只是复制数字。所以符号位最终成为未签名情况下的数字的一部分。所以如果给一个无符号数赋一个负数“n”,你会得到一个大数字“2^32- | n |'(如果它是一个32位的字)或'2^64- | n |'如果它是一个64位字。 – lurker
我看到令人困惑的是,在二进制补码中,'-5'应该是'4294967291',而不是'4255644633'。我在'gcc'中签出,这确实是我得到的价值。我不明白他如何获得不同的价值。 –
@ user3095972:您发布的第二个代码无法输出“4255644633”。您要么发布错误的代码,要么发布错误的输出。 – AnT