【问题标题】:Determining the sign of an int using shifts? [closed]使用移位确定 int 的符号? [关闭]
【发布时间】:2013-09-28 19:59:05
【问题描述】:

问题来了

  • sign - 如果为正则返回 1,如果为零则返回 0,如果为负则返回 -1
  • 法律行动:! ~ & ^ | + >
  • 最大操作数:10
  • 评分:2

我想过向右移动 31 以获取符号位,但从技术上讲,0 不能是正负吗?

【问题讨论】:

  • 我不清楚为什么要降价。问题很清楚,提问者已经描述了问题和尝试。至少提供一个理由。
  • @ryyker 闻起来像“请做我的功课”
  • 回答OP的“......不能0是积极和消极......?”在数学上,0 可以被认为是双符号、无符号、只有正数等。存在许多模型。给定“如果为正则返回 1,如果为零则返回 0,如果为负则返回 -1”,目标很明确,即在给定 0 时返回什么。考虑一下这是编程要求中的一个小教训:目标已明确说明(欢呼——你很幸运),但更大的目标可以有不同的解释。您是否悄悄地编写代码以规范和/或向customer 提出问题?

标签: c bit signed bits


【解决方案1】:

你可以试试这样32 bit int:-

(x >> 31) | (((~x + 1) >> 31) & 1)

【讨论】:

  • 转移负整数是 C 中实现定义的行为,因此任何转移 int 的答案通常都是不正确的。但是,如果您假设int 的范围好像使用了二进制补码编码(或者如果使用了二进制补码),那么首先将int 转换为unsigned int 将起作用(由于转换为的模块化行为无符号整数类型)。
猜你喜欢
  • 2011-11-12
  • 1970-01-01
  • 1970-01-01
  • 2023-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-03
  • 2017-02-13
相关资源
最近更新 更多