有符號變數與無符號變數的值的轉換

2021-08-04 04:22:56 字數 828 閱讀 9248

#include char getchar (int x,int y)

int main (void)

這段程式的輸出結果為:

c1 = 1;

c2 = 2;

c3 = 1;

c4 = 2;

首先說明getchar()函式的作用:將引數x的值轉換為無符號整形後再與y相加。其結果與101進行比較,如果大於10則函式返回1,否則返回2。

注意:當表示式中存在有符號型別和無符號型別時,所有的運算元都自動轉換為無符號型。

因此y值會首先自動轉換成無符號的整數,然後和a相加,最後再與10進行比較。

以下是列印的各個值的分析:

c1:傳入引數分別為7和4,兩個數相加後為11,大於10,c1返回1;

c2:傳入引數分別為7和-7,負數在轉為無符號整數數時會先求出其補碼,在32位的編譯器中,-7的原碼為1000 0000 0000 0000 0000 0000 0000 0111,

補碼為1111 1111 1111 1111 1111 1111 1111 1001,7的補碼為0000 0000 0000 0000 0000 0000 0000 0111,相加再轉換為十進位制為4294967296,而無符號整形的範圍 為

0~4294967295,顯然溢位了1,其最終值為0,0小於10,所以c2 = 2;

c3:傳入引數分別為7和-8,同上,a+y = 4294967295 ,剛好達到無符號整型的極限,大於10,所以c3 = 1;

c4:傳入引數分別為-6和7,同上,a+y = 4294967297,溢位2,其最終值為1,小於10,所以c3 = 2;

有符號變數與無符號變數的值的轉換

最近了解了一下有符號變數與無符號變數的區別和聯絡,看下面 include char getchar intx,inty intmain void 程式輸出結果為 c1 1 c2 2 c3 1 c4 2 首先說明getchar 函式的作用 將引數x的值轉換為無符號整形後再與y相加。其結果與101進行比...

有符號變數與無符號變數的值的轉換

知識點 原碼和補碼,在計算機系統中,數值一律用補碼來表示和儲存 正數的補碼 與原碼相同 負數的補碼 符號位為1,其餘位為該數絕對值的原碼按位取反,然後加1 例如,乙個char型別的 7的補碼 因為是負數,則符號位為 1 整個為10000111 其餘7位為 7的絕對值 7的原碼 0000111按位取反...

有符號與無符號

最高位為1,表示這個數為負數 最高位為0,表示這個數為正數 include int main 執行結果 正數的補碼為正數本身 負數的補碼為負數的絕對值各位取反後加1 8位整數5的補碼為 0000 0101 8位整數 7的補碼為 1111 1001 16位整數20的補碼為 0000 0000 0001...