11010011 << 1
表示所有位居向前移一位,原有的符号保留,如果是正数还是正数,负数还是复数。位移以后的数为:10100110,由于在向前移的过程中,原来的第一位超出了范围,所以将被舍弃,原来的最后一位向前移以后,不足的位数用0填充。
11010011 >> 1
移完以后的结果为01101001.每个位上的数字均向右移一位,不足的位用0填充,原来最后一位1将被舍弃。
而<<< 和 >>>都表示无符号位移,-11010011 将按照<<和>>的规则进行位移,但是无论是<<< 还是 >>>,都表示得出的最终结果是没有符号的,也就是这样位移出来的结果都是正数。;利用这个特性,在一些需要取随机正整数的地方或者其他需要忽略符号以及需要将负数通过位移变为正数的计算中,可以利用这个特性方便快捷的得出计算结果。
简单的讲,<<表示2的整数倍的乘积计算。比如,1 << 3 = 1 * (2 * 2 * 2) = 8 , 1 << 1 * (2 * 2 * 2 * 2) = 16,
>>表示2的整数倍的除运算
16 >> 4 = 16 / (2 * 2 * 2 * 2) = 1,
16 >> 3 = 16 / (2 * 2 * 2) = 2,
16 >> 2 = 16 / (2 * 2) = 4,
16 >> 1 = 16 / (2) = 8,
但是大部分的数字都不是2的整数倍的,比如17在位移的时候,得出的结果与16是一样的,因为位移的结果没有小数,即使是8.999999,也将被取整为8.
最终结果(楼主没有说明位移几位,例子就以位移一位和2位为主)
11010011 << 1 10100110
11010011 << 2 01001100
-11010011 << 1 -10100110
-11010011 << 2 -01001100
11010011 >> 1 01101001
11010011 >> 2 00110100
-11010011 >> 1 -01101001
-11010011 >> 2 -00110100
11010011 <<< 1 10100110
11010011 <<< 2 01001100
-11010011 <<< 1 10100110
-11010011 <<< 2 01001100
11010011 >>> 1 01101001
11010011 >>> 2 00110100
-11010011 >>> 1 01101001
-11010011 >>> 2 00110100