前言:

本文讲的是c++中<<(左移)和>>(右移)的作用,以及实现的时候发生了什么,如有错误,敬请斧正,希望能对大家有所帮助

原码反码补码

在其之前我们要先了解计算机里面的三种机械数
计算机都是通过数字的补码进行运算

  1. 原码
    原码是人类的正常理解方式的二进制,即首位表示的是正负号,其余位表示的是数值。
  2. 反码
    负数的反码是除了符号位不变其余的0变1,1变0,正数的反码还是它本身
  3. 补码
    负数的补码是除了符号位不变其余的0变1,1变0,最后在再1,正数的反码还是它本身

<< (左移):x<<y==x*(2^y)

左移就是将二进制的每一个数都往左移动一位,高位舍去,低位补0

栗子:

  1. 1<<1
    原码:000000001
    第一步:反码:00000001
    第二步:补码:00000001
    第三步:移动:00000010
    第四步:反码:00000010
    第五步:原码:00000010
    也就是1*(2^1)=2
  2. -3<<2
    原码:10000011
    第一步:反码:11111100
    第二步:补码:11111101
    第三步:移动:11110100
    第四步:反码:11110011
    第五步:原码:10001100
    (因为负数的补码是最后+1,所以再往原码转化的时候应该-1)
    也就是-3*(2^2)=-12

>> (右移):x>>y==x/(2^y)

右移就是将二进制的每一个数都往右移动一位,高位补1,低位舍去

栗子:

  1. 15>>2
    原码:00001111
    第一步:反码:00001111
    第二步:补码:00001111
    第三步:移动:00000011
    第四步:反码:00000011
    第五步:原码:00000011
    也就是15/(2^2)=3
  2. -4>>2
    原码:10000100
    第一步:反码:11111011
    第二步:补码:11111100
    第三步:移动:11111111
    第四步:反码:11111110
    第五步:原码:10000001
    (因为负数的补码是最后+1,所以再往原码转化的时候应该-1)
    也就是-4/(2^2)=-1

后记

这个知识其实之前我并不是很了解,之前只是知道这有什么作用,但是并没有弄懂他为什么是这样运算的,但是今天被一个好朋友问起来,当时我只是把怎么用给她说了说,但是并不知道她那书上和我理解了恰恰相反。。所以就去网上查阅了相关资料,才致使没有翻车。。

最新文章

  1. eclipse删除perspective
  2. 截取指定网站Html编码
  3. VTK修炼之道60:体绘制_体绘制管线图形渲染管线
  4. Cookie的使用(js-cookie插件)
  5. 分布式事务解决方案框架(LCN)
  6. sqlite 查询 支持多用户同时_SQLite支持多进程同时操作数据库文件吗?
  7. 【2017年第3期】从点状应用到大数据统一平台
  8. 必备的Linux基础命令
  9. php larver 导出e,laravel5 Excel导出
  10. About UserAccountControl
  11. 多域名证书的签名和自签名流程
  12. axure轮播图怎么设置循环轮播_Axure RP8 动态面板之轮播图设置
  13. C语言:从入门到进阶笔记(完整版)
  14. 油品调和计算软件_燃料油品的调合及计算方法及航空汽油的调合
  15. 通过路由远程计算机重启,如何通过三种方式重启路由器
  16. StackStorm安装WebUI
  17. 测试管理工具的基本功能有哪些?
  18. JavaScript求最大的岛屿面积
  19. vue项目中引入.xlsx文件
  20. 关于Android开发中如何使用dp表示长宽

热门文章

  1. 使用docker安装常用软件
  2. win mysql 卸载工具_windows下彻底卸载mysql
  3. 高等数学——微积分中的不定积分
  4. 准备安装knoppix
  5. 排水管网监测预警系统:为城市排水建设提质增效
  6. Uuntu16 学习记录(持续更新中......)
  7. mysql执行存储过程exec_mysql 执行存储过程 exec
  8. 计算机科学与技术论文智慧之美,信息科学与技术学院5篇论文被计算机多媒体领域国际顶级会议录用...
  9. avue 属性说明 及使用
  10. 计算机操作员标准,计算机操作员职业标准.doc