【发布时间】:2011-11-12 13:46:59
【问题描述】:
仅使用:
! ~ & ^ | + >
没有循环
我需要确定一个 32 位整数的符号,如果是正数,我需要返回 1,如果是 0,我需要返回 0,如果是负数,我需要返回 -1。
有什么想法吗?我首先考虑移动超过 31 位,然后查看那个标志,但这显然行不通,现在我有点卡住了。
【问题讨论】:
-
我只能判断它是否为负数。如果它为 0,则该数字可能全为零,也可能为正数,但我将这些位移开了。
-
啊,我错过了也检测 0 的要求。
-
@Oli:它不可移植,因为右移负值的结果是实现定义的,并且没有要求它要么 0-填充或符号填充.也就是说,在实践中它会起作用,因为所有或几乎所有的实现都做一个或另一个。
-
请注意,
!和+都不是位运算符。 -
你可以这样做吗,例如
if (!x) return 0;?
标签: c logic bit-manipulation