1. 程式人生 > >C語言 —— char與unsigned char

C語言 —— char與unsigned char

pri pre unsigned clas 輸出結果 類型 有符號數 nbsp sign

1 #include <stdio.h>
2 int main()
3 {
4     unsigned char a = 128;
5     char b = a;
6     printf("a = %d , b = %d",a,b);
7     return 0; 
8 }

輸出結果為 a = 128 , b = -128。

128的二進制表示為1000 0000

因為char是有符號類型,所以編譯器把128,即1000 0000當成有符號數,即補碼為1000 0000 (因為計算機中的有符號數都是用補碼來表示的),其表示的十進制值為B2T = -2^8 = -128(此處參考csapp中第45面的公式2.3)。所以b = 128

C語言 —— char與unsigned char