能力值:
( LV2,RANK:10 )
|
-
-
2 楼
哎哎···自己先顶一个··
|
能力值:
( 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
网上找的 贴过来
|
能力值:
( 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++中有很多流,输入流,输出流,文件流,字符串流等 ,这方面我也搞不太懂,不过作为流操作符的时候其实是重载的实现。具体的我也不知道怎么说,不过感觉也没必要完全搞懂得样子。想用的时候就自己重载一个也行。
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
<<除了移位,更多的是用在代码可读性方面的使用
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
以前只学过一点c语言,现在也忘记的差不多了。
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
楼主基础不是很扎实呀
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
相当不扎实啊···可惜了我还是学计算机的··
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
嗯嗯···可读这个我还是知道
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
谢谢··这下弄明白了···麻烦了··
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
受教了受教了···谢谢啊··
|
|
|