有符號型別與無符號型別之間的轉換

2022-02-06 00:20:42 字數 347 閱讀 5455

void foo(void)

unsigned int a = 6;

int b = -20;

(a+b > 6) ? puts("> 6") : puts("<= 6");

printf("b = %#x\n",b);

b = 0xffffffec

這個問題測試你是否懂得c語言中的整數自動轉換原則;

這無符號整型問題的答案是輸出是「>6」。

原因是當表示式中存在有符號型別和無符號型別時所有的運算元都自動轉換為無符號型別。因此-20變成了乙個非常大的正整數,所以該表示式計算出的結果大於6。這一點對於應當頻繁用到無符號資料型別的嵌入式系統來說是丰常重要的。

有符號型別與無符號型別值範圍

以char為例 最小值為 signed char p 0x80 最大值為 signed char q 0x7f p,最高為1時表示為負數,絕對值為2 7次方 0x80 0x7f 0xff 1 面試題int為4位元組 unsigned int p 6 signed int q 20 p q的十六進製制...

有符號與無符號

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

無符號與有符號

一,小精度往大精度轉換。1.1c語言中比int小的整型 包括short unsigned short unsigned char和char 在運算中都要轉換成int然後進行運算 unsigned char a unsigned char b a b 10,a和b分別先轉換成int,再計算 1.2同精...