Разница между логическим и арифметическим сдвигом в программировании микроконтроллеров заключается в том, что арифметический сдвиг — это сдвиг знакового числа, а логический — беззнакового числа. 1
При логическом сдвиге сдвинутые в направлении биты теряются, а освободившиеся позиции заполняются нулями. 3 При арифметическом сдвиге сдвиг влево аналогичен логическому, а при сдвиге вправо — свободные позиции заполняются значениями крайнего левого бита, который ещё называют знаковым. 3 При этом арифметические сдвиги не меняют знак числа. 2
Например, при сдвиге вправо битов в числе с отрицательным знаком (signed) выполняется арифметический сдвиг — освободившиеся позиции слева заполняются единичками (перенос знака). 3