<< 运算符 && >> 运算符
正数位移
当 x>>n
中 x 为正数时,会将x的所有位右移x位,同时左边高位补0
显而易见,运算结束后,值为1 。
可知右移n位,结果就是 x / 2^n
:7 / 2 ^2 = 1;
也同理x<<n
会将x的所有位左移x位,右边地位补0,
其运算结果为 x*(2^n)
。
负数位移
当负数在进行左移运算时,运算方式没有改变
左移几位,就乘上几个2
-2 << 2= -8
逻辑位移和算数位移
当x是有符号整型的负数时,位移运算的结果因编译器的差异会有所改变。
在所有编译器中,会执行逻辑位移和算术位移
逻辑位移
逻辑位移不考虑符号位,包括所有符号位进行一起位移,以0来填补空白
可知,负整数位移过程中:
符号位由1变为0,位移的结果为0或正整数
其结果只能通过 二进制 转十进制 进行运算 。
算术位移
算术位移保留最高位的符号位,并用位移前的符号位来填补空白
以图为例:
位移前后符号不变
位移后的绝对值值为原来的绝对值的 1/2^2=1/4
结语
当进行负数位移时,无论采用哪种位移方式都会降低程序的可移植性
,
所以我们要记住不要对负数进行位移。