#include <stdio.h>
int main(void) {
int i = 2147483647; // INT_MAX
unsigned int j = 4294967295; // UINT_MAX
printf("%d %d %d\n", i, i+1, i+2); // 有符號解讀
printf("%u %u %u\n", i, i+1, i+2); // 無符號解讀
printf("%d %d %d\n", j, j+1, j+2); // 有符號解讀
printf("%u %u %u\n", j, j+1, j+2); // 無符號解讀
return 0;
}
輸出 (32 位系統):
2147483647 -2147483648 -2147483647 2147483647 2147483648 2147483649 -1 0 1 4294967295 0 1
printf 僅按格式符解讀二進制位模式,不關心變量聲明類型%d 將 32 個 1 解讀為 -1;%u 解讀為 4294967295unsigned int un = 3000000000;
short end = 200;
long big = 65537;
long long verybig = 12345678908642;
printf("%u, %d\n", un, un); // 3000000000, -1294967296
printf("%hd, %d\n", end, end); // 200, 200
printf("%ld, %hd\n", big, big); // 65537, 1 (截斷低 16 位)
printf("%lld, %ld\n", verybig, verybig); // 12345678908642, 1942899938 (截斷低 32 位)
修飾符速查:h=short(16位) l=long ll=long long
int x = 100;
printf("%d %o %x\n", x, x, x); // 100 144 64
printf("%d %#o %#x\n", x, x, x); // 100 0144 0x64
# 標記強制顯示前綴 0 (八進制) / 0x (十六進制)
「計算機內存中只有位模式,無符號/有符號、進制只是解讀視角。
printf完全由格式字符串決定解讀方式。」