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

标签 c binary int

这是我尝试过的,我的逻辑是我的 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/

相关文章:

linux - 如何在linux下使用命令行将字符串转换为二进制整数文件

c - strace输出问题

c - 在 C 中使用 unsigned int 有什么意义?

java - 程序执行时间

c++ - 使用 C/C++ (GCC/G++) 在 Linux 中的套接字编程中发送和接收文件

matrix - APL:如何从矩阵中删除仅包含 0 的行和列?

c++ - 何时使用 `short` 而不是 `int` ?

python - 如何在 Python 2.7 中检查字符串是(int 还是 float)

c - for 循环无法正常运行

使用 setrlimit 更改堆栈大小后,C++ 仍然出现段错误(核心转储)错误