【问题标题】:Represent exponential express in terms of bit operators用位运算符表示指数表达式
【发布时间】:2015-10-09 01:58:41
【问题描述】:

我正在尝试弄清楚我将如何代表

x/2^y -> in terms of binary operators

我知道

x >> 1 = = x/2 

所以我的直觉是,使用我所知道的,需要进行更多操作才能表示。但是我已经被困了一段时间,所以我想我可能会在这里得到一些指导。

【问题讨论】:

  • 您的意思是x / (2^y)?因为 x 除以 2^x 并不是一个很有趣的函数。
  • 天哪,我的错。是的,没错。

标签: bit-manipulation bitwise-operators


【解决方案1】:

鉴于这一澄清,我想你想要x >> y;

修订:以上仅适用于无符号整数。

我不知道如何在不使用加法的情况下将有符号数字舍入为零。使用带符号的 32 位整数,以下工作:

((x+(x>>31))>>y)-(x>>31)

这是有效的,因为x>>31 对于负数是 -1,对于正数是零。

【讨论】:

  • 如果可能的话,你认为你能给出一点解释吗?我对位运算符的世界还很陌生,所以我需要更长的时间来处理到底发生了什么。谢谢!
  • >> 运算符的定义是它产生 (x / (2^y)) 值的整数部分。事实证明,这也是二进制补码算法中的位移行为。如果将数字右移y 位,则每个剩余​​位的值将减少2^y。最右边的y 位被丢弃(它们将是除法的小数部分)。
  • 好的,现在更有意义了。但这条路线似乎有问题。例如,如果我想做 (-15)/(2^1) 那么答案应该是 -7 但结果却是 -8。
  • 使用无符号整数再试一次。您给出的示例向下舍入,而不是向零舍入。
  • 我如何使它接近零?因为这就是我想要的。无符号数字工作正常。
猜你喜欢
  • 2023-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-27
  • 2012-10-30
  • 1970-01-01
  • 2013-10-26
相关资源
最近更新 更多