关于二进制左移的问题

img


这里面a =10011111b,对其进行左移,是如何变成0000 0100b

你没看懂
不是把a左移
是把1左移
1左移2位不就是100吗
然后取反,就变成了1111 1011
那么a与上1111 1011,就把除了第2位之外的其他位跟1与运算,不管原来是什么都不变,第2位跟0与运算,那么不管原来是什么都变成0了
-=-=-=-=
看不懂代码的时候,要学会拆解
a &= ~(1<<2)
这个看起来复杂,那么你把它分步看
假设还有一堆变量a1,a2,a3...作为中间结果,那么代码等价于
a1=1<<2
a2=~a1
a=a&a2

不是说对a左移,是指的对1左移两位,变为100

右移5位可以,左移做不到。