C/C++ 左移<<, 右移>>的作用及說(shuō)明
C/C++ 左移<<, 右移>>作用
1. 左移 <<
取兩個(gè)數(shù)字,左移第一個(gè)操作數(shù)的位,第二個(gè)操作數(shù)決定要移動(dòng)的位置。換句話(huà)說(shuō),左移動(dòng)一個(gè)整數(shù) x 和一個(gè)整數(shù) y ( x < < y ) 等于 x 乘以 2y
代碼示例:
/* C++ Program to demonstrate use of left shift operator */ #include<stdio.h> int main() { // a = 5(00000101), b = 9(00001001) unsigned char a = 5, b = 9; // The result is 00001010 printf("a<<1 = %d\n", a<<1); // The result is 00010010 printf("b<<1 = %d\n", b<<1); return 0; }
輸出結(jié)果:
a<<1 = 10
b<<1 = 18
2. 右移 >>
取兩個(gè)數(shù)字,向右移動(dòng)第一個(gè)操作數(shù)的位,第二個(gè)操作數(shù)決定移動(dòng)的位置。同樣地,右平移( x > > y )等于x除以 2y.
代碼示例:
/* C++ Program to demonstrate use of right shift operator */ #include<stdio.h> using namespace std; int main() { // a = 5(00000101), b = 9(00001001) unsigned char a = 5, b = 9; // The result is 00000010 printf("a>>1 = %d\n", a>>1); // The result is 00000100 printf("b>>1 = %d\n", b>>1); return 0; }
輸出結(jié)果:
a>>1 = 2
b>>1 = 4
3. 數(shù)字 1 左移 <<
1 << i = 2i。它只適用于正數(shù)。
代碼示例:
#include<stdio.h> int main() { int i = 3; printf("pow(2, %d) = %d\n", i, 1 << i); i = 4; printf("pow(2, %d) = %d\n", i, 1 << i); return 0; }
輸出結(jié)果:
pow(2, 3) = 8
pow(2, 4) = 16
注意事項(xiàng):
C++ 左移右移越界情況
左移越界
- 一個(gè)32位的long,值為1,
- 左移32位 = 1
- 左移33位= 2
- ...
- 左移64位= 1
- 左移65位= 3
所以左移越界有點(diǎn)向循環(huán)左移,左移Index位--》相當(dāng)于左移 Index%32位 ,當(dāng)然%多少是根據(jù)變量類(lèi)型來(lái)定的
int main() { long v[2] = {0,0}; long u1 = 1; long u2 = (u1 <<33); v[1] |= (u1<<33); LOG(sizeof(long)) cout << u1 <<"," <<u2<< "," << v[1]<< endl; std::cin.get(); }
輸出:
右移越界
右移越界,移出去的位都會(huì)變成0
#include<iostream> #include<vector> #include<unordered_map> using namespace std; #define LOG(x) std::cout<<x<<std::endl; int main() { long v[2] = {0,0}; long u1 =3; long u2 = (u1 >>1); v[1] |= (u1>>1); LOG(sizeof(long)) cout << u1 <<"," <<u2<< "," << v[1]<< endl; std::cin.get(); }
輸出:
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
C語(yǔ)言結(jié)構(gòu)體數(shù)組同時(shí)賦值的另類(lèi)用法
今天小編就為大家分享一篇關(guān)于C語(yǔ)言結(jié)構(gòu)體數(shù)組同時(shí)賦值的另類(lèi)用法,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2018-12-12淺析char 指針變量char *=p 這個(gè)語(yǔ)句的輸出問(wèn)題
下面小編就為大家?guī)?lái)一篇淺析char 指針變量char *=p 這個(gè)語(yǔ)句的輸出問(wèn)題。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-05-05C語(yǔ)言實(shí)現(xiàn)電話(huà)簿管理系統(tǒng)課程設(shè)計(jì)
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)電話(huà)簿管理系統(tǒng)課程設(shè)計(jì),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11C語(yǔ)言超詳細(xì)講解指針與結(jié)構(gòu)體
指針提供了對(duì)地址操作的一種方法,因此,使用指針可使得C語(yǔ)言能夠更高效地實(shí)現(xiàn)對(duì)計(jì)算機(jī)底層硬件的操作。另外,通過(guò)指針可以更便捷地操作數(shù)組。C數(shù)組允許定義可存儲(chǔ)相同類(lèi)型數(shù)據(jù)項(xiàng)的變量,結(jié)構(gòu)是C編程中另一種用戶(hù)自定義的可用的數(shù)據(jù)類(lèi)型,它允許您存儲(chǔ)不同類(lèi)型的數(shù)據(jù)項(xiàng)2022-05-05C++實(shí)現(xiàn)數(shù)獨(dú)快速求解
這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)數(shù)獨(dú)快速求解的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03一篇文章帶你了解C語(yǔ)言:入門(mén)基礎(chǔ)
這篇文章主要介紹了C語(yǔ)言入門(mén)之基礎(chǔ)知識(shí)詳解,文中有非常詳細(xì)的C語(yǔ)言使用教程及相關(guān)基礎(chǔ)知識(shí),對(duì)正在學(xué)習(xí)c語(yǔ)言的小伙伴們有非常好的幫助,需要的朋友可以參考下2021-08-08