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

C語言十進制轉二進制實現:位運算與數組存儲詳解

     編輯:關於C語言

C語言實現十進制轉二進制完整指南

十進制轉二進制是計算機基礎教學中的經典問題,也是理解位運算與數組操作的絕佳切入點。本文提供兩種實現方案:基於除2取餘的數組存儲法,以及更高效的位運算直接輸出法。

方案一:數組存儲餘數法(教學演示)

 0) {
        binary[index++] = unum % 2;
        unum /= 2;
    }
    
    // 輸出結果(高位在前)
    printf("%d 的二進制表示為: ", original);
    for (int i = index - 1; i >= 0; i--) {
        printf("%d", binary[i]);
        // 每4位加空格增強可讀性
        if (i % 4 == 0 && i > 0) printf(" ");
    }
    printf("\n");
    
    return 0;
}

關鍵點解析:

  • 使用unsigned int處理負數,自動獲取補碼表示
  • 餘數存入數組後需逆序輸出(低位在前,高位在後)
  • 32位int最多32位二進制,數組大小固定為32

方案二:位運算高效輸出法(生產推薦)

= 0; i--) {
        int bit = (unum >> i) & 1;
        if (bit) leadingZero = 0;
        if (!leadingZero || i == 0) {
            printf("%d", bit);
            if (i % 4 == 0 && i > 0) printf(" ");
        }
    }
    printf("\n");
}

優勢:無需額外數組,O(1)空間複雜度,直接通過移位和位與操作提取每一位。

進階擴展:通用進制轉換函數

 0) {
        result[idx++] = digits[num % base];
        num /= base;
    }
    
    // 逆序輸出
    for (int i = idx - 1; i >= 0; i--) {
        putchar(result[i]);
    }
    putchar('\n');
}

測試驗證


輸出示例:

輸入:           0  二進制: 0
輸入:           1  二進制: 1
輸入:           5  二進制: 101
輸入:          10  二進制: 1010
輸入:         255  二進制: 1111 1111
輸入:          -1  二進制: 1111 1111 1111 1111 1111 1111 1111 1111
輸入:         -10  二進制: 1111 1111 1111 1111 1111 1111 1111 0110
輸入:   2147483647  二進制: 111 1111 1111 1111 1111 1111 1111 1111
輸入:  -2147483648  二進制: 1000 0000 0000 0000 0000 0000 0000 0000

常見錯誤與優化建議

  1. 忽略負數處理:直接對有符號數右移會進行算術右移(符號位擴展),必須轉為無符號數
  2. 前導零處理:教學代碼可輸出全32位,實用工具建議跳過前導零
  3. 可讀性增強:每4/8位插入空格或分隔符,對應十六進制/字節邊界
  4. 邊界測試:必須測試0、1、最大值、最小值、負數等邊界情況

位運算核心技巧總結

操作代碼說明
提取第i位(num >> i) & 1右移i位後與1位與
設置第i位為1num |= (1 << i)或運算設置位
清除第i位為0num &= ~(1 << i)與運算清除位
翻轉第i位num ^= (1 << i)異或運算翻轉位

掌握十進制轉二進制不僅是完成作業要求,更是建立位運算直覺的關鍵一步。建議在調試嵌入式寄存器、網絡協議解析、加密算法實現等場景中靈活運用位運算技巧。

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