- 數據存儲方式
- 計算機中數據都是以二進制進行存儲的 正數為原碼形式,負數為二進制補碼形式
- 假定以字長為兩個字節的機器為例int a=7
-
signed int a=7 存儲方式:0000 0000 0000 0111
-
signed int a=-7 存儲方式: 1111 1111 1111 1001
-
unsigned int a=7 存儲方式:0000 0000 0000 0111
- -1是最大的負整數,轉換成正整數也是最大的
- 實例代碼
-
1 #include <stdio.h> 2 3 char getChar (int x,int y) 4 { 5 char c; 6 unsigned int a = x; 7 8 (a+y > 10) ? (c = 1): (c = 2); 9 10 return c; 11 } 12 13 int main (void) 14 { 15 char c1 = getChar(7,4); 16 char c2 = getChar(7,-7); 17 char c3 = getChar(7,-8); 18 char c4 = getChar(-6,7); 19 20 printf("c1 = %d\n",c1); 21 printf("c2 = %d\n",c2); 22 printf("c3 = %d\n",c3); 23 printf("c4 = %d\n",c4); 24 25 return 0; 26 }
運行結果:c1=1,c2=2,c3=2,c4=1;
- 當表達式中同時存在有符號類型與無符號類型時,所有的操作數都將自動轉換成無符號類型
- c3分析
- y將自動轉換成無符號類型
- y=-7在計算機中的存儲為1111 1111 1111 1001 a=7存儲為0000 0000 0000 0111
- a+y=0000 0000 0000 0000 溢出 所以值為0
- c4分析
- y=-8存儲為 1111 1111 1111 0111 a=7存儲為0000 0000 0000 0111
- a+y=1111 1111 1111 1111 即最大的整數 肯定大於10 所以c4=1;
- c3分析
-