unsigned和signed間的轉換

2021-07-25 08:27:28 字數 790 閱讀 1541

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...