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

C語言十進制轉二進制與指定位翻轉實現

     編輯:關於C

位運算是底層開發基本功。本文實現:整數轉二進制字符串顯示(每 4 位分組)、指定低位翻轉 (XOR 掩碼)。

完整代碼


#include 

// 整數轉二進制字符串 (MSB 在前)
char* itobs(int n, char *ps) {
    const int SIZE = 8 * sizeof(int);
    for (int i = SIZE - 1; i >= 0; --i, n >>= 1)
        ps[i] = (n & 1) + '0';
    ps[SIZE] = '\0';
    return ps;
}

// 格式化輸出:每 4 位加空格
void show_bstr(const char *str) {
    for (int i = 0; str[i]; ++i) {
        putchar(str[i]);
        if ((i+1) % 4 == 0 && str[i+1]) putchar(' ');
    }
}

// 翻轉低 bits 位
int invert_end(int num, int bits) {
    int mask = 0;
    for (int i = 0; i < bits; ++i) {
        mask |= (1 << i); // 構建低 bits 位為 1 的掩碼
    }
    return num ^ mask; // XOR 翻轉
}

int main() {
    char bin_str[8*sizeof(int)+1];
    int number;
    while (scanf("%d", &number) == 1) {
        printf("Original: "); show_bstr(itobs(number, bin_str)); putchar('\n');
        number = invert_end(number, 4); // 翻轉低 4 位
        printf("Inverted: "); show_bstr(itobs(number, bin_str)); putchar('\n');
    }
    return 0;
}

運行示例

Input: 15
Original: 0000 0000 0000 0000 0000 0000 0000 1111
Inverted: 0000 0000 0000 0000 0000 0000 0000 0000  (低4位 1111 → 0000)

Input: 10
Original: 0000 0000 0000 0000 0000 0000 0000 1010
Inverted: 0000 0000 0000 0000 0000 0000 0000 0101  (1010 → 0101)

核心技巧解析

  • 掩碼構建:mask = (1 << bits) - 1 更高效 (位移後減 1 得到低 bits 位全 1),循環構建僅為教學演示。
  • XOR 翻轉:x ^ 1 = ~x (單位翻轉),x ^ mask 批量翻轉掩碼為 1 的位。
  • 字符串生成:從最高位向最低位填充,避免逆序;(n & 1) + '0' 利用 ASCII 碼連續性轉字符。

擴展:任意區間翻轉


// 翻轉第 start 到 end 位 (0-indexed, 含端點)
int invert_range(int num, int start, int end) {
    int mask = ((1 << (end - start + 1)) - 1) << start;
    return num ^ mask;
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved