C语言的位运算,左移右移的问题


怎么理解左移一位等于乘2,右移一位等于除以2?

编程 程序员 Android C++ c

鑫gaga 11 years, 6 months ago

这么基本的问题,希望你在提问题之前应该自己搜索寻求答案,如果之后还是不明白,在提问题的时候应该展示你的思维过程,再寻求别人的解答。请不要浪费别人的时间。

http://lmgtfy.com/?q=%E4%BD%8D%E8%BF%90%E7%AE%97

[补充]

如果要理解二进制的位移,可以以十进制的位移作类比: 123 左移变成 1230 就是乘以10,右移变成 12 就是除以10。二进制的话,把10改成2就是了。

需要形式化的表示的话,对于 k 进制的数 abc 为例:


 abc = a * (k^2) + b * (k^1) + c (k^0)

abc/k 可以表示为:


 abc/k = a * (k^2) / k + b * (k^1) / k + c (k^0) / k
      = a * (k^1) + b * (k^0) + 0
      = ab

其中 / 代表整除, ^ 代表乘方。左移类似。

阿爸耕田去 answered 11 years, 6 months ago

Your Answer