符號優先順序1題

2021-09-24 06:21:05 字數 486 閱讀 8744

unsigned char i=0x80;

printf(「0x%x\n」, ~i>>3+1);//無符號16進製制輸出

char ci=0x80;

printf(「0x%x\n」, ~ci>>3+1);

解析:取反操作前,字元型資料會自動轉成整形

即 i = 0x00000080

~i 為 0xffffff7f

~i>>3+1 由於+號運算子優先順序比》位移運算子高,所以 ~ i>>3+1等價於 ~i>>4,則得到0xfffffff7

ci變數也一樣,先轉換成整形,為0xffffff80(因為ci為有符號型字元變數,且符號位為1,轉成整形時,高位補1)

之後同理

移位操作優先順序最低, 所以都是右移4位, 取反優先順序最高, 最先做

整形提公升, uchar會提公升到uint, 而char會提公升到int, 所以0x80在uint中還是0x80, 而在int為0xffffff80, 它們取反的結果就不同了

C語言符號優先順序

優先順序運算子 名稱或含義 使用形式 結合方向 說明 1 陣列下標 陣列名 常量表示式 左到右 圓括號 表示式 函式名 形參表 成員選擇 物件 物件 成員名 成員選擇 指標 物件指標 成員名 2 負號運算子 表示式 右到左 單目運算子 型別 強制型別轉換 資料型別 表示式 自增運算子 變數名 變數名...

C語言符號優先順序

優先順序 運算子名稱或含義 使用形式 結合方向說明1 陣列下標 陣列名 常量表示式 左到右 圓括號 表示式 函式名 形參表 成員選擇 物件 物件.成員名 成員選擇 指標 物件指標 成員名2 負號運算子 表示式 右到左單目運算子 型別 強制型別轉換 資料型別 表示式 自增運算子 變數名 變數名 單目運...

C語言符號優先順序

優先順序 運算子名稱或含義 使用形式 結合方向說明1 陣列下標 陣列名 常量表示式 左到右 圓括號 表示式 函式名 形參表 成員選擇 物件 物件.成員名 成員選擇 指標 物件指標 成員名2 負號運算子 表示式 右到左單目運算子 型別 強制型別轉換 資料型別 表示式 自增運算子 變數名 變數名 單目運...