物件導向程式設計
文章推薦指數: 80 %
8個位元構成一個位元組(byte),在C/C++語言中,我們使用char(字元)資料型別來 ... 例如對於16 bits所構成的整數(int)變數,使用位元運算子可以直接處理這16個位元的 ...
計算機概論:C/C++程式設計
第2章、C++程式基本元素
授課教師:陳慶瀚
WWW
:http://www.miat.ee.isu.edu.tw/cpp
E-mail:[email protected]
2.8位元運算(bitwiseoperation)
一個位元(bit)是所有數位資訊的最小單位,一個位元值只有兩種可能值:0和1(有時在不同的情況,我們也會將一個位元值表示為on/off或true/false等)。
位元的處理是程式對電腦所能做的最低階的控制。
8個位元構成一個位元組(byte),在C/C++語言中,我們使用char(字元)資料型別來表示byte。
例如一個字元的變數值可能包含位元如下:01101100。
如果用16進位(hexadecimal)來表示上述字元值,則寫成0x6C,C/C++使用一個前置號“0x”來表示其後的數值是16進位。
每一個16進位數值需要4bits,因此上例的01101100就分成(0110)2=616,(1100)2=C16
,結合起來就是0x6C。
表2-1是二進位與十六進位轉換的對照表
表2-1二進位與十六進位轉換的對照表
Hex
Binary
Hex
Binary
0
0000
8
1000
1
0001
9
1001
2
0010
A
1010
3
0011
B
1011
4
0100
C
1100
5
0101
D
1101
6
0110
E
1110
7
0111
F
1111
位元運算子(bitwiseoperator)可以讓程式設計者直接操作個別的位元。
例如對於16bits所構成的整數(int)變數,使用位元運算子可以直接處理這16個位元的任意一個獨立位元值,相反的,其他的算數運算子(如加法運算子)僅能夠把這16個位元視為一個16-bit的數值,而不能夠分開處理。
位元運算子主要功能在於對單一位元執行設定(為1)、清除(為0)、邏輯運算、移位等處理。
這些位元運算子可以應用在所有的整數變數(int)和字元變數(char)。
表2-2列出這些位元運算子和它們的功能。
表2-2位元運算子和它們的功能
&
Bitwise
AND
兩個位元進行位元AND運算
|
Bitwise
OR
兩個位元進行位元OR運算
^
Bitwise
exclusiveOR
兩個位元進行位元XOR運算
~
Complement
一個位元的位元NOT運算
<<
Shift
left
位元向左移位
>>
Shift
right
位元向右移位
AND位元運算子(&)
AND位元運算子比較兩個位元,如果兩個位元都是1,則運算結果為1,否結為0。
當兩個8-bit變數(char)執行AND運算,則兩個變數的每一個位元都獨立的執行AND運算。
/*----------------------------------------------------*/
// 範例程式2-8
//
AND位元運算
//
陳慶瀚,2001
/*----------------------------------------------------*/
#include
所以位元左移和右移運算子可以取代一些特定的2N乘法和除法運算,對於一些需要高執行效率的應用程式來說,這是非常有用的,因為位元左移和右移運算的速度遠快於執行整數的乘法和除法運算。
所以,如果有一行程式碼
i
=j*8;
基於執行效率上的考量,可以改成
i=j<<3;
// i=j*23
這種寫法可加快程式的速度,但不可避免的會降低原始碼的可閱讀性,因為一般人閱讀上述原始碼並不容易直覺地判斷這是一個乘8的運算,因此在掌握或修改程式上就會較困難。
所以如果程式執行效率如果不是最重要考量的話,還是寫成i=j*8是較具親和性的做法。
計算機概論:C/C++程式設計
義守大學電機系陳慶瀚
2001.10.02
延伸文章資訊
- 1C 速查手冊- 3.5 位元運算子 - 程式語言教學誌
以下例子示範位元運算子且、或、互斥或 #include <stdio.h> int main(void) { int a = 0x101; int b = 0x11; printf("%x\n"...
- 2C 位元運算子
C 位元運算子 ; 位運算子會執行位AND ( & ) 、位獨佔OR () ^ ,以及位包含OR () | 作業。 ; AND-expression : equality-expression....
- 3物件導向程式設計
8個位元構成一個位元組(byte),在C/C++語言中,我們使用char(字元)資料型別來 ... 例如對於16 bits所構成的整數(int)變數,使用位元運算子可以直接處理這16個位元的 ...
- 4位元運算子& AND, | OR, ^ XOR, ~ NOT @ 程式手扎 - 隨意窩
在這個例子當中的& 運算子就是C/C++ 的AND 位元運算子,從這個例子可以看到& 運算子分別對unsigned char 的8 bits 做了AND 位元運算。 在之前你已經看過& 出現在別...
- 5Bit - 演算法筆記
C/C++ 的位元運算子: << 、 >> 、 & 、 | 、 ^ 、 ~ ,可以修改變數的位元。 UVa 10469 10264. Bitwise Left Shift << Bitwise ...