c++位操作包括兩種:傳統的c語言方式的位操作和c++中利用bitset容器的位操作
一、傳統的c方式位操作:
1.基本操作:
使用乙個unsigned int變數來作為位容器。
2.操作符:
| 按位或操作符:result=exp1|exp2;當exp1和exp2中對應位中至少有乙個為1時,result中對應位為1,否則為0。
& 按位與操作符::result=exp1&exp2;當exp1和exp2中對應位全為1時,result中對應位為1,否則為0。
^ 按位異或或操作符:result=exp1^exp2;當exp1和exp2中對應位不相同時,result中對應位為1,否則為0。
~ 反轉操作符:將位容器中的所有位都反轉,1變為0,0變為1。
<< 按位左移操作符:exp<
>> 按位右移操作符:exp>>n,將容器中所有的位向右移n位,空出的位用0填充。
|=,&=,^= 分別對應|&^三種操作符的復合操作符。
3.常用操作
這裡我們假設有乙個result的unsigned int變數用來儲存32個學生的成績(通過和不通過分別用0和1),這樣result就有33位(result從右至左,從0開始計算位數,在這個例子中0位被浪費)。
(a) 將第27位設定為及格(設作1)其他位不變:
result|=(1<<27) //任意的位值與1作按位或操作其值為1,而與0作按位與操作其值不變
(b) 將第27位設定成不及格(設為0)。
result&=~(1<<27) //任意的位值與0作按位與操作其值為0,而與1作按位與操作其值不變
(c) 反轉第27位的值。
result^=(1<<27) //任意的位值與1作按位異或操作其值為1,而與0作按位異與操作其值不變
二、c++中的bitset容器
1.標頭檔案:
#include
2.宣告乙個容器:
(a)宣告乙個指定位數的空容器(所有位設為0): bitsetbits;
(b)宣告乙個指定位數並將指定的幾個位初始化為相應值的容器: bitsetbits(int);
bitdetbits(string&)
總結:bitset模板類中型別引數傳遞容器的位數,而構造函式引數通過乙個int或乙個string&值來從右至左初始化容器中的相應值。
3.bitset的基本用法:
操作 功能 用法
test(pos) pos位是否為1 a.test(4)
any() 任意位是否為1 a.any()
none() 是否沒有位為1 a.none()
count() 值是1的位的小數 a.count()
size() 位元素的個數 a.size()
[pos] 訪問pos位 a[4]
flip() 翻轉所有位 a.flip()
flip(pos) 翻轉pos位 a.flip(4)
set() 將所有位置1 a.set()
set(pos) 將pos位置1 a.set(4)
reset() 將所有位置0 a.reset()
reset(pos) 將pos位置0 a.reset(4)
4.bitset與傳統c位操作及字串的轉換
可以通過to_string()成員將容器轉輸出為乙個string字串,另外還可以用to_long()成員將容器輸出到傳統的用於c風格的位容器中。如:
unsigned long bits = bits.to_long();
sting str(bits.to_string());
C 位操作介紹
很多基礎的東西都忘記差不多了,昨天跟新公司的主管討論乙個加密工具的開發,他提到使用按位抑或是可逆運算,我還跟他爭論 我把抑或理解成按位或了 後來一身冷汗,這麼基礎的東西都忘記了,枉我號稱c程式設計師,可惜可惜啊 c 位操作包括兩種 傳統的c語言方式的位操作和c 中利用bitset容器的位操作 一 傳...
C 位操作介紹
c 位操作包括兩種 傳統的c語言方式的位操作和c 中利用bitset容器的位操作 一 傳統的c方式位操作 1.基本操作 使用乙個unsigned int變數來作為位容器。2.操作符 按位或操作符 result exp1 exp2 當exp1和exp2中對應位中至少有乙個為1時,result中對應位為...
C 位操作介紹
c 位操作包括兩種 傳統的c語言方式的位操作和c 中利用bitset容器的位操作 一 傳統的c方式位操作 1.基本操作 使用乙個unsigned int變數來作為位容器。2.操作符 按位或操作符 result exp1 exp2 當exp1和exp2中對應位中至少有乙個為1時,result中對應位為...