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

mrQ*_*RTY 1 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");
}
Run Code Online (Sandbox Code Playgroud)

这是输出:0008032640当我输入时'h'.

为什么这个打印整数不是0和1?

das*_*ght 6

表达方式

int bit = (1 << bit_index) & ch;
Run Code Online (Sandbox Code Playgroud)

使用相应的位设置产生零或2的幂.要使其进入0..1范围,可以ch向右移动并使用掩码1,或者转换表达式,如下所示:

int bit = ((1 << bit_index) & ch) != 0;
Run Code Online (Sandbox Code Playgroud)