【问题标题】:Converting an integer to binary strings in c在c中将整数转换为二进制字符串
【发布时间】:2018-03-01 19:02:20
【问题描述】:

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

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

附:我不允许更改此函数的参数,我的教授主要将str 的大小设置为 33,我也不允许更改。

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

【问题讨论】:

  • int 已签名。你忘记了吗?
  • 我总是使用Valgrind 来理解段错误
  • 基于 Eugene 所说的,如果您在每次迭代时将 tmp 的值打印到控制台,我认为您会对您的输出感到惊讶,特别是考虑到您的循环退出子句。
  • @HansPetterTaugbølKragset 我让程序工作,我实际上是 c 新手,从未听说过 valgrind;谢谢你的建议,我会记住的!

标签: c binary int


【解决方案1】:

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

【讨论】:

  • int tmp = 1 &lt;&lt; 31; --> unsigned tmp = 1u &lt;&lt; 31;(一定要改成1u
  • 谢谢!该程序现在运行良好,我不敢相信我忘记了这一点
猜你喜欢
  • 2018-07-07
  • 1970-01-01
  • 2012-08-16
  • 2012-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-30
相关资源
最近更新 更多