我正在学习C,我的部分练习是处理按位运算符。我正在尝试创建一个函数,打印出char输入的2补码。
这是我到目前为止所做的:
#include <stdio.h>
#include <stdlib.h>
void find_binary(char ch) {
long bit_index = 0;
unsigned long sz = sizeof(ch)*8-1;
for (bit_index = 0; bit_index <= sz; ++bit_index) {
int bit = (1 << bit_index) & ch;
printf("%d", bit);
}
printf("\n");
}
输入0008032640
时,输出结果为'h'
。
为什么这个打印整数不是0和1?
答案 0 :(得分:6)
表达式
int bit = (1 << bit_index) & ch;
产生零或2的幂,并设置相应的位。要将其置于0..1范围内,请将ch
向右移动并使用1
进行遮罩,或按以下方式转换表达式:
int bit = ((1 << bit_index) & ch) != 0;
答案 1 :(得分:2)
尝试以下代码
#include <stdio.h>
#include <limits.h>
void find_binary( char ch )
{
for ( int i = CHAR_BIT; i != 0; )
{
int bit = ( 1 << --i & ch ) != 0;
printf( "%d", bit );
}
}
int main( void )
{
find_binary( 'A' );
return 0;
}