谁能详细解释一下以下 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 循环迭代是:
01010101 & 10000000 = 00000000
结果是0
,你打印0
01010101 & 01000000 = 01000000
结果是> 0
,你打印1
01010101 & 00100000 = 00000000
结果是0
,你打印0
- 等等。
打印完所有内容后,您将得到 01010101
。
关于c - C中Ascii Char转二进制的解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42557654/