<< 和 >> 在 C++ 里面是什么意思

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

原码反码补码

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

原码是人类的正常理解方式的二进制,即首位表示的是正负号,其余位表示的是数值。

  1. 反码
    负数的反码是除了符号位不变其余的0变1,1变0,正数的反码还是它本身
  2. 补码

负数的补码是除了符号位不变其余的0变1,1变0,最后在再1,正数的反码还是它本身

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

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

栗子:

  1. 1<<1

原码:000000001
第一步:反码:00000001
第二步:补码:00000001
第三步:移动:00000010
第四步:反码:00000010
第五步:原码:00000010
也就是1*(2^1)=2

  1. -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

  1. -4>>2

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

后记

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

相关文章
程序人生 - 燕窝等级分几 A 是什么意思?有什么差别?5A燕窝最好吗?
程序人生 - 燕窝等级分几 A 是什么意思?有什么差别?5A燕窝最好吗?
391 0
程序人生 - 燕窝等级分几 A 是什么意思?有什么差别?5A燕窝最好吗?
|
3月前
|
存储
服务器几U是什么意思?
【10月更文挑战第5天】服务器几U是什么意思?
177 0
|
8月前
|
数据安全/隐私保护
8*A800 80G 是什么意思
【5月更文挑战第26天】8*A800 80G 是什么意思
117 1
|
8月前
|
C++
c++引用是什么意思?
c++引用是什么意思?
58 2
|
8月前
解释一下什么是VIF。
解释一下什么是VIF。
873 0
|
调度
I/O 操作是什么意思?底层原理是什么?
I/O 操作是什么意思?底层原理是什么?
1242 0
|
Python
7-ELEVEn中的“n”为啥要小写?答案匪夷所思...
7-ELEVEn中的“n”为啥要小写?答案匪夷所思...
113 0
|
C++
【C/C++】%2d,%02d是什么意思
【C/C++】%2d,%02d是什么意思
905 0
|
数据安全/隐私保护
⊕是什么意思
⊕是什么意思
1076 0
⊕是什么意思
|
开发框架 Oracle Java
JNDL是什么意思
JNDI是 Java 命名与目录接口(Java Naming and Directory Interface),在J2EE规范中是重要的规范之一,不少专家认为,没有透彻理解JNDI的意义和作用,就没有真正掌握J2EE特别是EJB的知识。 那么,JNDI到底起什么作用? 要了解JNDI的作用,我们可以从“如果不用JNDI我们怎样做?用了JNDI后我们又将怎样做?”这个问题来探讨。 没有JNDI的做法: 程序员开发时,知道要开发访问MySQL数据库的应用,于是将一个对 MySQL JDBC 驱动程序类的引用进行了编码,并通过使用适当的 JDBC URL 连接到数据库。 就像以下代码这样: