首页
社区
课程
招聘
[旧帖] [求助]一个关于c++的问题 0.00雪花
发表于: 2011-5-25 15:08 1619

[旧帖] [求助]一个关于c++的问题 0.00雪花

2011-5-25 15:08
1619
最近自学c++,在thinking in c++中遇到一个关于<<操作符的问题
求解释:
//: C03:printBinary.cpp {O}
#include <iostream>
void printBinary(const unsigned char val) {
for(int i = 7; i >= 0; i--)
if(val & (1 << i))
std::cout << "1";
else
std::cout << "0";
} ///:~
if(val&(1<<i))是的意义。

另请大神详细讲解一下<<操作符的作用··
万分感谢··

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (10)
雪    币: 35
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
哎哎···自己先顶一个··
2011-5-25 15:19
0
雪    币: 525
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
左移运算符(<<)   

  将一个数的二进位全部左移若干位,若高位左移后溢出,则舍弃,不起作用。

   例:a=a<<2
                 将a的二进制数左移2位,右补0。
           若a=15,即二进制数00001111,则

a          00001111  
↓   ↓  
a<<1   00011110  
↓   ↓  
a<<2   00111100  

                         最后a=60

   右移运算符(>>)   
   将一个数的二进位全部右移若干位,低位移出部分舍弃。

    例:a=a>>2
                  将a的二进制数右移2位,左补0。
            若a=15,即二进制数00001111,则

a          00001111  
↓   ↓  
a>>1   00000111  
↓   ↓  
a>>2   00000011  

网上找的 贴过来
2011-5-25 15:26
0
雪    币: 20
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
<< 作为运算符的时候是左移位运算 比如int a=(1<<2)此时a就是4了,左移相当于是乘以2的N次方的运算 这里就是1x2的2次方。用移位运算会比乘法运算快一些。
if(val & (1 << i))
std::cout << "1";
else
std::cout << "0";
这段代码是根据不同的i值,来取val的不同的位,在这里val应该是8位的一个数 设为10101010
当i=0时 ,1<<0=0000 0001   val&(1<<0)的结果就是
(10101010)&(0000 0001)=0000 0000,输出“0”
当i=1时,1<<1=0000 0010  val&(1<<1)的结果就是
(10101010)&(0000 0010)=0000 0010,输出“1”
.
.
.
当i=7时,1<<7=1000 0000 val&(1<<7)的结果就是
(10101010)&(1000 0000)=1000 0000 输出“1”

需要注意的是 ,代码中是从i=7开始的,所以输出的刚好是10101010 也就是正序
如果代码中是从i=0开始的,那么输出的就是01010101 也就是倒序了。

因为1<<i之后的值只有一位是1,其他的都是0 所以相当于是判断对应的位是1还是0了

<<作为流操作符,可以简单的理解为流的流向,c++中有很多流,输入流,输出流,文件流,字符串流等 ,这方面我也搞不太懂,不过作为流操作符的时候其实是重载的实现。具体的我也不知道怎么说,不过感觉也没必要完全搞懂得样子。想用的时候就自己重载一个也行。
2011-5-25 15:36
0
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
<<除了移位,更多的是用在代码可读性方面的使用
2011-5-25 15:42
0
雪    币: 80
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
以前只学过一点c语言,现在也忘记的差不多了。
2011-5-25 16:57
0
雪    币: 37
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
楼主基础不是很扎实呀
2011-5-25 18:18
0
雪    币: 35
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
相当不扎实啊···可惜了我还是学计算机的··
2011-5-26 13:46
0
雪    币: 35
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
嗯嗯···可读这个我还是知道
2011-5-26 13:48
0
雪    币: 35
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
谢谢··这下弄明白了···麻烦了··
2011-5-26 13:50
0
雪    币: 35
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
受教了受教了···谢谢啊··
2011-5-26 13:51
0
游客
登录 | 注册 方可回帖
返回
//