算术左移和逻辑左移:你真的知道它们的区别吗?

3、算术左移和逻辑左移有什么区别?算术左移是指将一个二进制数向左位移一定数量,假设我们要将十进制数12转换为二进制表示形式并对其进行算术向左位移2个位置:

在计算机科学中,左移是一种常见的操作。它可以将二进制数向左位移一定数量,然后用0填充空出来的位。这个操作有两种不同类型:算术左移和逻辑左移。虽然这两种操作看起来很相似,但它们实际上有着不同的目的和效果。

什么是算术左移?

算术左移是指将一个二进制数向左位移一定数量,并在右侧用0进行填充。如果该数为有符号整数,则符号位也会被向左移到新位置,并且最右侧被填充的数字应该是原始数字中第一个非符号数字。

例如,假设我们要将十进制数12转换为二进制表示形式并对其进行算术向左位移2个位置:

“`

12(10) = 1100(2)

110000(2) = 96(10)

在此示例中,我们从原始值“1100”开始,并将其向右扩展两个位置(添加了两个零)。由于原始值为正整数,在进行扩展时保留了符号位。

什么是逻辑左移?

与算术偏移不同,逻辑偏移只是简单地将一个二进制数向左位移一定数量,并在右侧用0进行填充。这种类型的偏移通常用于无符号整数。

例如,假设我们要将十进制数5转换为二进制表示形式并对其进行逻辑向左位移3个位置:

5(10) = 101(2)

101000(2) = 40(10)

算术左移和逻辑左移:你真的知道它们的区别吗?

在此示例中,我们从原始值“101”开始,并将其向右扩展了三个位置(添加了三个零)。由于原始值为无符号整数,在进行扩展时不需要考虑符号位。

算术左移和逻辑左移有什么区别?

算术左移和逻辑左移看起来很相似,但它们实际上有着根本上的不同。主要区别在于:算术偏移到新位置后保留符号位,而逻辑偏移到新位置后不保留符号位。

例如,在以下示例中:

-4 << 1

11111100 -> 11111000

使用算术偏置(<<)操作时,“-4”被转换为二进制“11111100”。然后,“<<”运算符将该数字向左挪动一位并用0填充。结果是“11111000”,这等价于十进制数字“-8”。在这种情况下,符号位被保留,并且新数字为负数。

现在,让我们看看使用逻辑偏移(<<<)操作的示例:

-4 <<< 1

使用逻辑偏移(<<<)操作时,“-4”被转换为二进制“11111100”。然后,“<<<”运算符将该数字向左挪动一位并用0填充。结果是“11111000”,这等价于十进制数字“248”。在这种情况下,符号位不保留,并且新数字为正数。

算术左移和逻辑左移都是常见的二进制操作。它们之间最大的区别是算术左移保留符号位,而逻辑左移不保留符号位。因此,在进行任何类型的二进制操作时,请确保您选择正确的类型以获得正确的结果。