c – 确定32位int的符号

仅使用:

! 〜& ^ | << >>

没有

我需要确定32位整数的符号,如果为正则需要返回1,如果为0,则返回0,如果为负则返回-1.

有任何想法吗?我首先考虑转移31位,然后看着那个标志,但显然不会工作,现在我有点卡住了.

试试这个:

(x >> 31) | (((0 - x) >> 31) & 1)

这个怎么样:

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

编辑2:

回应评论中提出的问题(或者说是挑选)

这些解决方案的假设是有效的:

> x是32位有符号整数类型.
>在这个系统上,带符号的32位整数是两个补码. (右移算术)
>绕过算术溢出.
>对于第一个解决方案,文字0与x的类型相同.

翻译自:https://stackoverflow.com/questions/7341414/determine-the-sign-of-a-32-bit-int

转载注明原文:c – 确定32位int的符号