在c中将整数转换为二进制字符串

时间:2017-09-20 15:58:59

标签: c binary int

这是我尝试过的,我的逻辑是我的tmp左移31次将与用户输入整数I进行比较,并且将插入值1或0索引str[0] - > str[31]和I null终止str[32]\0

但是,我遇到了分段错误。

P.S。我不允许更改此功能的参数,我的教授将str的大小设置为主要的33,我也不允许更改。

void int2bitstr(int I, char *str) {
        int tmp = 1 << 31;
        do{
                *str++ = !!(tmp & I) + '0';
        } while(tmp >>= 1);
        *str = '\0';
}

1 个答案:

答案 0 :(得分:1)

尝试tmp unsigned int。右移负(有符号)整数的行为是实现定义的,在你的情况下可能会以1s(原始MSB)移位,从而导致循环超过str的长度。