c - C中Ascii Char转二进制的解释

标签 c bit-manipulation ascii

谁能详细解释一下以下 Char to Binary 函数在 C 中的工作原理?

具体来说,移位和逻辑如何在迭代中工作

#include <stdio.h>
#include <limits.h>
void printCharAsBinary(char c) {
    int i;
    for(i = CHAR_BIT; i >= 0; i--){
        printf("%d", ( unsigned int )( ( c & (1 << i) ) ? 1 : 0) );
    }
}

void printCharAsBinaryVer2(char c){
    int bit_index;
    for (bit_index = CHAR_BIT; bit_index >= 0; --bit_index)
    {
        int bit = ( unsigned int ) (c >> bit_index) & 1;
        printf("%d", bit);
    }
}

如果有帮助,您可以在此处查看它们的运行情况: http://code.geeksforgeeks.org/zC22WO


根据答案更新:

F 是十进制的 70

70 在二进制中是01000110

使用以下代码:

#include <stdio.h>
#include <limits.h>
void printCharAsBinary(char c) {
    int i;
    for(i = CHAR_BIT; i >= 0; i--){
        printf("%d", ( unsigned int )( ( c & (1 << i) ) ? 1 : 0) );
    }
}

迭代将是:

01000110 & 10000000 = 00000000  RESULT is 0   so PRINT 0
01000110 & 01000000 = 01000000  RESULT is > 0 so PRINT 1
01000110 & 00100000 = 00000000  RESULT is 0   so PRINT 0
01000110 & 00010000 = 00000000  RESULT is 0   so PRINT 0
01000110 & 00001000 = 00000000  RESULT is 0   so PRINT 0
01000110 & 00000100 = 00000100  RESULT is > 0 so PRINT 1
01000110 & 00000010 = 00000000  RESULT is > 0 so PRINT 1
01000110 & 00000001 = 00000000  RESULT is 0   so PRINT 0

使用以下代码:

void printCharAsBinaryVer2(char c){
    int bit_index;
    for (bit_index = CHAR_BIT; bit_index >= 0; --bit_index)
    {
        int bit = ( unsigned int ) (c >> bit_index) & 1;
        printf("%d", bit);
    }
}

00000000 & 00000001 = 00000000  RESULT is 0   so PRINT 0
00000001 & 00000001 = 00000001  RESULT is > 0 so PRINT 1
00000010 & 00000001 = 00000000  RESULT is 0   so PRINT 0
00000100 & 00000001 = 00000000  RESULT is 0   so PRINT 0
00001000 & 00000001 = 00000000  RESULT is 0   so PRINT 0
00010001 & 00000001 = 00000001  RESULT is > 0 so PRINT 1
00100011 & 00000001 = 00000001  RESULT is > 0 so PRINT 1
01000110 & 00000001 = 00000000  RESULT is 0   so PRINT 0

最佳答案

Char 在二进制表示中有 8 位。 您在这样的字符表示中将每个位打印为 1 或 0:

您通过 for 循环并使用计数器向左进行逻辑移位,然后使用按位 AND 检查位是否已设置。如果是,则打印 1,否则打印 0。

假设您的二进制数是 01010101

For 循环迭代是:

  1. 01010101 & 10000000 = 00000000 结果是0,你打印0
  2. 01010101 & 01000000 = 01000000 结果是 > 0,你打印 1
  3. 01010101 & 00100000 = 00000000 结果是0,你打印0
  4. 等等。

打印完所有内容后,您将得到 01010101

关于c - C中Ascii Char转二进制的解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42557654/

相关文章:

c# - Ascii 范围考虑二进制文件?

将 ascii 转换为 input_event 键码

c - pthreads 向特定线程发出信号

python - 在Python中读取C数组

c++ - 从 `std::vector<char>` 内部的位获取整数

c - Atmega32A 与 PC 上的 UART 通信

c - 旋转由字节数组表示的位图

c - 自定义 strcmp 中的奇怪错误 (C)

c - 为什么 SUCCEEDED 宏中有这么多括号?

c++ - 使用 cin.get() 读取扩展 ASCII