位运算——左移右移的正负运算

2022-07-29  本文已影响0人  没有钱也很认真

规整:位运算,参与运算码为2进制码,补码参与运算。

a左移n位 =a*2^n;( 正负数左移,绝对值一致.。例:10*2^2 = 40, -10/2^2 = -40);

b右移动n位 = b/2^n ( 整数右移 ,例:10/2^2 = 2;负数右移,运算除不尽结果-1。  例:- 10/2^2= - 2 - 1= - 3);

一.正数的左移右移运算

a. 左移规则:高位丢失,低位补零

示例:a=10,a<<2

源码:0000 0000 0000 0000 0000 0000 0000 1010

反码:0000 0000 0000 0000 0000 0000 0000 1010

前补码:0000 0000 0000 0000 0000 0000 0000 1010

左移2位,运算后:

后补码:【-00】00 0000 0000 0000 0000 0000 0000 1010【+00】

反码: 0000 0000 0000 0000 0000 0000 0010 1000

补码:0000 0000 0000 0000 0000 0000 0010 1000

结果:a= 40

b.右移规则:低位丢失,高位补零

示例:a=10,a>>2

源码:0000 0000 0000 0000 0000 0000 0000 1010

反码:0000 0000 0000 0000 0000 0000 0000 1010

前补码:0000 0000 0000 0000 0000 0000 0000 1010

右移2位,运算后:

后补码:【+00】00 0000 0000 0000 0000 0000 0000 10【-10】

反码:0000 0000 0000 0000 0000 0000 0000 0010 

补码:0000 0000 0000 0000 0000 0000 0000 0010

结果:a= 2

二.负数的左移右移运算

a. 左移规则:高位丢失,低位补零

示例:a= -10,a<<2

源码:1000 0000 0000 0000 0000 0000 0000 1010

反码:1111 1111 1111 1111 1111 1111 1111 0101

前补码:1111 1111 1111 1111 1111 1111 1111 0110(反码+1)

左移2位,运算后:

后补码:【-11】11 1111 1111 1111 1111 1111 1111 0110【+00】

反码: 1000 0000 0000 0000  0000 0000 0010 0111(反码+1)

补码:1000 0000 0000 0000  0000 0000 0010 1000 

结果:a= -40

b.右移动规则:低位丢失,高位补1

示例:a= -10,a>>2

源码:1000 0000 0000 0000 0000 0000 0000 1010

反码:1111 1111 1111 1111 1111 1111 1111 0101

前补码:1111 1111 1111 1111 1111 1111 1111 0110(反码+1)

右移2位,运算后:

后补码:【+11】1111 1111 1111 1111 1111 1111 1111 01【-10】

反码:1000 0000 0000 0000 0000 0000 0000 0010 

补码:1000 0000 0000 0000 0000 0000 0000 0011

结果:a= -3

上一篇 下一篇

猜你喜欢

热点阅读