【发布时间】:2012-04-04 01:36:23
【问题描述】:
我在考虑如何在不使用if 语句或abs() 的情况下获取整数的绝对值。起初我使用左移位(<<),试图让负号超出范围,然后将位右移回原来的位置,但不幸的是它对我不起作用。请让我知道为什么它不起作用以及其他替代方法。
【问题讨论】:
-
如果您知道要处理的 int 的大小,只需使用逐位“与”清除最高位。
-
@MarcB:这将适用于符号/幅度表示(这是相当不寻常的),但对于 1 的补码或(迄今为止最常见的)2 的补码会失败。
-
@MarcB:它比 2 的补码稍微复杂一些。
-
这不是作业,而是我的编译器课程讲师提出的问题。我发现这是一个有趣的问题,因为我以前从未这样做过。顺便说一句,解决这个问题不会提高我的课程成绩,但肯定会提高我的编码技能。 ^__^
-
@adembudak 这是一个关于无分支编程的问题,这是一种无需控制流(因此没有 if / else、三元或循环)的部分代码的编程技术。 OP 想知道 如何 它是如何完成的,而不是执行它的函数的名称。
标签: c++ c bit-manipulation