#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