示例代碼
#include <stdio.h> int main() { char c = 255; printf("%d\n", c); int i = 255; printf("%d\n", i); return 0; }
輸出結果
-1 255
解釋
計算機是以二進制補碼的形式存儲數值。
char 的大小是 1 個字節(8bit),取值范圍是 -128 ~ 127。255 的二進制原碼是 1111 1111,而 1111 1111 作為補碼的值是 -1,所以 char c = 255 輸出 -1。假設 char c = 257。257 的二進制是 (1)0000 0001,丟棄超出范圍的高位 1,符位為 0 是正數,正數的補碼是其本身,代碼結果則輸出 1。
int 的大小是 4 個字節(32bit),取值范圍是 -2^31 ~ 2^31 - 1,其范圍值通常取決於編譯器(CPU)。255 的二進制原碼是 0000 0000 0000 0000 0000 0000 1111 11111,int 的取范圍遠遠超過了 char 的取范圍,所以 int i = 255 輸出 255。