C - 为给定字符打印二进制文件

时间:2014-09-09 21:57:13

标签: c bitwise-operators

我正在学习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?

2 个答案:

答案 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;
}