首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> 關於C

C Primer Plus 經典範例:整數溢出、格式化輸出與進制顯示全解析

     編輯:關於C

一、整數溢出與循環特性演示

#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

核心知識點

  • 有符號整數溢出屬於未定義行為 (C 標準),但常見實現為補碼環繞
  • printf 僅按格式符解讀二進制位模式,不關心變量聲明類型
  • %d 將 32 個 1 解讀為 -1;%u 解讀為 4294967295

二、格式化輸出長度修飾符實戰

unsigned 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 完全由格式字符串決定解讀方式。」

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved