C语言中的左移操作符和右移操作符是什么意思

<<左移操作符 >>右移操作符 到底是怎么计算的呢

b=a<<n 等价于b=a*2^n
说个容易记的
左移n位就是把这个数转为二进制后 后面加n个零 前面的n位舍弃
右移n位就是把这个数转为二进制后 前面加n个零 后面的n位舍弃

什么意思呢
咱看代码
第一行是十六进制打印 第二行是十进制打印
先看十进制的
b=24也就是a=24,自己快拿出你的小本子算算3*2^3 是不是等于24
再看一下十六进制
(这里说一下 之所以说这个是看一下原理 理解最重要嘛
本来想打印二进制直接 呃呃结果发现并没有这个转换符 尴尬
所以只能打印十六进制咯)
3 是不是0011
18 是不是0001 1000
所以3左移三位后怎么变成的18 也就是3怎么变成的24就是这样来的咯C语言中的左移操作符和右移操作符是什么意思
b=a>>n 等价于什么呢 有聪明的小伙伴心想 肯定是b=a/2^n了 真聪明 就是这样的

看图

8二进制0000 1000
1二进制0000 0001
这就是右移
那快掏出你那小本子算算8/2^3是不是等于1呀
呃呃为啥十进制十六进制都是1不用说了吧
C语言中的左移操作符和右移操作符是什么意思
``
再看一图
为啥是0嘞
你看 8是0000 1000
右移五位 即前面加5个零 然后0000 1000 最后五位舍弃 不就是0000 0000 嘛

补充几个格式字符
%d 有符号10进制整数  
%i 有符号10进制整数
%o 无符号8进制整数
%u无符号10进制整数  
%x 无符号的16进制数字,此时是以小写abcdef表示  
%X 无符号的16进制数字,此时是以大写ABCDEF表示的 x X 大小写对应的哦
无二进制哦

还有数字都是补码 形式存储的 ,当然正数的补码不变 就是你看到的10 27 100 之类的都是010100101 之类的存起来的 对计算机而言都是0100010010之类的 之所以表示出不同 就是因为你让计算机打印的 至于补码是啥 怎么来的 这不是这篇文章的主题 去百度一下就知道了

多多指教
C语言中的左移操作符和右移操作符是什么意思