1、
#include int main(int argc, char *argv)
結果:65535 -1
在計算機中,負數是以補碼來儲存的。html
c語言中常量整數 -1的補碼表示為0xffffffff。擷取後面16位ffff賦值給 變數a(unsigned short)。此時 a = 0xffff(a沒有符號位,0xffff轉換為十進位制為65535)。a又將0xffff,直接賦值給short b。 此時 b = 0xffff(但是要注意,b是有符號的,0xffff轉換為十進位制為-1)。
執行printf("%d %d",a,b);的時候,要將 a和b的值先轉換為int型:
a沒有符號所以轉為int型為0x0000ffff,
b有符號轉換為int型為0xffffffff。
故十進位制輸出值為 65535 -1. 2、
#include int main(int argc, char *argv)
結果:-1 -1
a在記憶體中值為0xffffffff,b的值為0xffffffff,都已經32位,
a轉換為int型的時候就是0xffffffff,所以輸出-1.
總結:1.unsigned 型別轉換為 signed型別的時候是直接複製到低位,高位為0.如果signed型別位數不夠,只直接裝載unsigned低位。
2.signed型別轉換為unsigned型別的時候,也是將補碼直接複製到低位,高位為符號位。如果unsigned位數不夠,只直接裝載signed低位。
signed和unsigned的比較
昨天,zrf師兄丟給我這樣乙個題,據說是微軟面試題 unsigned int i 3 cout 問結果是多少。第一反應 3。不過結果似乎不是這樣的,寫了個程式,執行了一下,發現是 4294967293。很詭異的乙個數字,怎麼也想不明白為什麼會是這麼個奇怪的數字。但是在我發現這數的十六進製制數是fff...
signed和unsigned的比較
unsigned int i 3 cout 問結果是多少。第一反應 3。不過結果似乎不是這樣的,寫了個程式,執行了一下,發現是 4294967293。很詭異的乙個數字,怎麼也想不明白為什麼會是這麼個奇怪的數字。但是在我發現這數的十六進製制數是fffffffd時,我想我已經離答案很近了.這個涉及到了混...
unsigned 和 signed 的理解
include int main int argc,char argv 結果 65535 1 這是兩段很簡單的 我就以第二段 為例。c語言中常量整數 1的補碼表示為0xffffffff。擷取後面16位ffff賦值給 變數a unsigned short 此時 a 0xffff a沒有符號位,0xff...