解释v< 0

时间:2016-03-29 10:27:12

标签: c bit-shift bits

这个逻辑给出了: -

if v < 0 then -1,
else +1

sign = +1 | (v >> (sizeof(int) * CHAR_BIT - 1))

对于v&gt; = 0,它非常清楚, 但在负整数的情况下,我正在修复。

让我们举一个-1(1111 1111)的例子: -

假设: - int需要两个字节

CHAR_BIT(每个字节代表的位数不是): - 8

在右移操作之后我们会:

sign = 0000 0001 | 0000 0001

那怎么会是-1

1 个答案:

答案 0 :(得分:1)

有两种类型的位移:logical shiftarithmetic shift。假设int是4个字节,哪一个是(-1) >> 31

在C / C ++中,当操作数是带符号的类型并且具有负值时,结果是实现定义的。

实际上,在大多数机器上,它是算术移位,这意味着(-1) >> 31结果为-1,但从技术上讲,结果取决于实现。