这是我尝试过的,我的逻辑是我的 tmp
左移 31 次将与用户输入整数 I
和值 1 或0 将被插入到索引 str[0]
-> str[31]
中,并且 I null 以 终止
。 str[32]
>\0
但是,我遇到了段错误。
附注我不允许更改此函数的参数,并且我的教授在 main 中将 str
的大小设置为 33,我也不允许更改。
void int2bitstr(int I, char *str) {
int tmp = 1 << 31;
do{
*str++ = !!(tmp & I) + '0';
} while(tmp >>= 1);
*str = '\0';
}
最佳答案
尝试将tmp
设置为unsigned int
。右移负(有符号)整数的行为是实现定义的,在您的情况下可能会移动 1 秒(原始 MSB),从而导致循环超过 str
的长度。
关于在c中将整数转换为二进制字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46326771/