国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > C++ > 正文

C/C++位操作實(shí)例總結(jié)

2020-01-26 15:23:09
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

本文詳細(xì)敘述了C/C++的位操作,這是C/C++程序設(shè)計(jì)中非常重要的概念。本文實(shí)例對(duì)于C/C++初學(xué)者來(lái)說(shuō)也具有很好的復(fù)習(xí)與參考價(jià)值。具體分析如下:

C/C++對(duì)位操作有如下方法:

一、位操作運(yùn)算符(注意:下面幾個(gè)運(yùn)算符不改變?cè)瓉?lái)的變量的值,只是獲得運(yùn)算的結(jié)果即一個(gè)新值)

按位取反:~

位與:&

位或:|

位異或:^

左移位運(yùn)算符:<<

將一個(gè)運(yùn)算對(duì)象的各二進(jìn)制位全部左移若干位(左邊的二進(jìn)制位丟棄,右邊補(bǔ)0)。
若左移時(shí)舍棄的高位不包含1,則每左移一位,相當(dāng)于該數(shù)乘以2。
右移位運(yùn)算符:>>

將一個(gè)數(shù)的各二進(jìn)制位全部右移若干位,正數(shù)左補(bǔ)0,負(fù)數(shù)左補(bǔ)1,右邊丟棄。
操作數(shù)每右移一位,相當(dāng)于該數(shù)除以2。
無(wú)符號(hào)右移運(yùn)算符:>>>

>>> 運(yùn)算符把 expression1 的各個(gè)位向右移 expression2 指定的位數(shù)。右移后左邊空出的位用零來(lái)填充。移出右邊的位被丟棄。

二、位字段

C++代碼如下:

struct bits{  unsigned int a:1;  unsigned int b:1;  unsigned int c:10;  unsigned int d:21;};

位字段由一個(gè)結(jié)構(gòu)聲明,該結(jié)構(gòu)聲明為每個(gè)字段提供標(biāo)簽,并決定標(biāo)簽字段的寬度.

上面的使用unsigned int作為位字段結(jié)構(gòu)的基本布局單元,因此即使一個(gè)結(jié)構(gòu)只有一個(gè)一位的成員字段,該結(jié)構(gòu)也和一個(gè)unsigned int的大小相同,上面用sizeof看為8,機(jī)器sizeof(unsigned int)為4,若把最后一個(gè)改為d:20,則本機(jī)器的sizeof剛好為4.

另外,十六進(jìn)制前面加 0x,八進(jìn)制前加 0

實(shí)例:寫一個(gè)函數(shù),返回將給定數(shù)字的后給定位數(shù)反轉(zhuǎn),即0變1,1變0

思路:是將整個(gè)數(shù)的全部位取反了,不合適.用異或^,把給定值和一個(gè)后面幾位全部是1前面剩下的都是0的數(shù)^,即可.

本例關(guān)鍵是怎么獲得那個(gè)后面幾位全是1的數(shù)

#include <iostream>using namespace std;int invert_end(int num,int bits)  //第一個(gè)表示傳進(jìn)來(lái)的數(shù)值,第二個(gè)是讓這個(gè)數(shù)值的后多少位反轉(zhuǎn){  int mask=0;  //此時(shí)全部位為0  int temp=1;  //此時(shí)它的最后一位是1  while (bits>0)  {    mask=mask|temp;  //或,每次只把1位置為1    temp=temp<<1;  //它的唯一一個(gè)是1的位向左移    bits--;  }  return num^mask;  //mask的后幾位已經(jīng)為1,異或即可}int main(void){  cout<<sizeof(int)<<endl;  int val;  cout<<"輸入一正整數(shù):/n";  cin>>val;  int res=invert_end(val,3);  cout<<val<<" "<<res;  cin.get();  return 0;}
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 山阴县| 红原县| 新野县| 隆回县| 台东市| 门源| 万州区| 肥西县| 乌恰县| 乌苏市| 沙湾县| 措勤县| 安国市| 滨海县| 银川市| 保靖县| 鹤山市| 怀来县| 九龙县| 辉南县| 庆阳市| 嘉善县| 大荔县| 九江县| 孝昌县| 定南县| 武穴市| 五华县| 稷山县| 嘉定区| 固镇县| 临夏县| 开阳县| 工布江达县| 太原市| 汶上县| 都江堰市| 家居| 垣曲县| 商南县| 民勤县|