算术移位和逻辑移位主要是针对右移而言算数移位是会用符号位作为填充,逻辑移位不填充直接补零
左移时总是移位和补零。右移时无符号数是移位和补零,此时称为逻辑右移;而有符号数大多数情况下是移位和补最左边的位(也就是补最高有效位即符号位),移几位就补几位,此时称为算术右移。
例:
127的补码:0111 1111
(127>>1)
右移一位: 0011 1111 ->
原码同补码一样 对应十进制:63
右移二位: 0001 1111 ->
原码同补码一样 对应十进制:31
右移三位: 0000 1111 ->
原码同补码一样 对应十进制:15
右移四位: 0000 0111 ->
原码同补码一样 对应十进制:7
右移五位: 0000 0011 ->
原码同补码一样 对应十进制:3
右移六位: 0000 0001 ->
原码同补码一样 对应十进制:1
右移七位: 0000 0000 ->
原码同补码一样 对应十进制:0
右移八位: 0000 0000 ->
原码同补码一样 对应十进制:0
2、-128的补码:1000 0000
右移一位: 1100 0000 ->
这个补码对应的原码为:1100 0000 对应十进制:-64
右移二位: 1110 0000 ->
这个补码对应的原码为:1010 0000 对应十进制:-32
右移三位: 1111 0000 ->
这个补码对应的原码为:1001 0000 对应十进制:-16
右移四位: 1111 1000 ->
这个补码对应的原码为:1000 1000 对应十进制:-8
右移五位: 1111 1100 ->
这个补码对应的原码为:1000 0100 对应十进制:-4
右移六位: 1111 1110 ->
这个补码对应的原码为:1000 0010 对应十进制:-2
右移七位: 1111 1111 ->
这个补码对应的原码为:1000 0001 对应十进制:-1
右移八位: 1111 1111 ->
这个补码对应的原码为:1000 0001 对应十进制:-1