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就是这样来的咯在这里插入图片描述
b=a>>n 等价于什么呢 有聪明的小伙伴心想 肯定是b=a/2^n了 真聪明 就是这样的

看图

8二进制0000 1000
1二进制0000 0001
这就是右移
那快掏出你那小本子算算8/2^3是不是等于1呀
呃呃为啥十进制十六进制都是1不用说了吧
在这里插入图片描述
``
再看一图
为啥是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之类的 之所以表示出不同 就是因为你让计算机打印的 至于补码是啥 怎么来的 这不是这篇文章的主题 去百度一下就知道了

多多指教
在这里插入图片描述

  • 6
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值