1 #include <stdio.h> 2 3 int main(void) { 4 char a = 127; 5 int b = 4; 6 int c = a + b; 7 a += b; 8 printf("c=%d",c); 9 //printf("c=%s",c); 10 printf("a=%d",a); 11 //printf("a=%c",a); 12 //printf("a=%s",a); 13 // your code goes here 14 return 0; 15 }
結果c=131 a=-125
char類型是1 byte = 8 bits
正數的原碼,補碼,反碼都相同,都等於它本身
負數的補碼是:符號位為1,其余各位求反,末位加1
反碼是:符號位為1,其余各位求反,但末位不加1
在計算機中,數據是以補碼的形式存儲的
補碼 0111 1111 + 0000 0100
= 1000 00011
補碼 = 1111 11101 = - (127-2)= -125
int c = a + b;
a 和 b直接轉換為int類型相加!
printf("c=%s",c);
此句發生錯誤。
類型之間計算時候轉換的規則
double<--float
↑
long
↑
unsigned
↑
int<--char、short
↑表示運算兩邊類型不一致時的轉換順序、<-表示即便兩邊類型一致依然要轉換為箭頭指向的數據類型再進行運算
整型提升
整型提升是C程序設計語言中的一項規定:在表達式計算時,各種整形首先要提升為int類型,如果int類型不足以表示則要提升為unsigned int類型;然后執行表達式的運算。
參考:http://blog.csdn.net/dyllove98/article/details/9004872
