重溫位操作 C 位操作介紹

2021-06-19 21:29:07 字數 2378 閱讀 1736

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中對應位為...