詳解C++中二進(jìn)制求補(bǔ)運(yùn)算符與下標(biāo)運(yùn)算符的用法
二進(jìn)制求補(bǔ)運(yùn)算符:~
語法
~ cast-expression
備注
二進(jìn)制反碼運(yùn)算符 (~)(有時稱為“按位反碼”運(yùn)算符)將生成其操作數(shù)的按位二進(jìn)制反碼。即,操作數(shù)中為 1 的每個位在結(jié)果中為 0。相反,操作數(shù)中為 0 的每個位在結(jié)果中為 1。二進(jìn)制反碼運(yùn)算符的操作數(shù)必須為整型。
~ 的運(yùn)算符關(guān)鍵字
compl 運(yùn)算符是 ~ 的文本等效項(xiàng)。訪問程序中的 compl 運(yùn)算符有兩種方式:包括頭文件 iso646.h,或使用 /Za 進(jìn)行編譯。
// expre_One_Complement_Operator.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;
int main () {
unsigned short y = 0xFFFF;
cout << hex << y << endl;
y = ~y; // Take one's complement
cout << hex << y << endl;
}
在此示例中,分配給 y 的新值是無符號值 0xFFFF 或 0x0000 的二進(jìn)制反碼。
將對整型操作數(shù)執(zhí)行整型提升,并且結(jié)果類型將是操作數(shù)將提升到的類型。
下標(biāo)運(yùn)算符:[]
postfix-expression [ expression ]
備注
后跟下標(biāo)運(yùn)算符 [ ] 的后綴表達(dá)式(也可為主表達(dá)式)指定數(shù)組索引。
通常,postfix-expression 表示的值是一個指針值(如數(shù)組標(biāo)識符),expression 是一個整數(shù)值(包括枚舉類型)。 但是,從語法上來說,只需要一個表達(dá)式是指針類型,另一個表達(dá)式是整型。 因此整數(shù)值可以位于 postfix-expression 位置,指針值可以位于 expression 的方括號中或下標(biāo)位置。 考慮以下代碼片斷:
int nArray[5] = { 0, 1, 2, 3, 4 };
cout << nArray[2] << endl; // prints "2"
cout << 2[nArray] << endl; // prints "2"
在前面的示例中,表達(dá)式 nArray[2] 與 2[nArray] 相同。 原因是下標(biāo)表達(dá)式 e1[ e2 ] 的結(jié)果由以下所示給定:
*( ( e2 ) + (e1) )
該表達(dá)式生成的地址不是 e1 地址中的 e2 字節(jié)。 相反,該地址將進(jìn)行縮放以生成數(shù)組 e2 中的下一個對象。 例如:
double aDbl[2];
aDb[0] 和 aDb[1] 的地址相距 8 字節(jié) - double 類型的對象的大小。 根據(jù)對象類型進(jìn)行的縮放將由 C++ 語言自動完成,并在其中討論了指針類型的操作數(shù)的加減法的相加運(yùn)算符中定義。
下標(biāo)表達(dá)式還可以有多個下標(biāo),如下所示:
expression1 [expression2] [expression3]...
下標(biāo)表達(dá)式從左至右關(guān)聯(lián)。 首先計(jì)算最左側(cè)的下標(biāo)表達(dá)式 expression1[expression2]。 通過添加 expression1 和 expression2 得到的地址構(gòu)成一個指針表達(dá)式;然后 expression3 將添加到此指針表達(dá)式,從而構(gòu)成一個新的指針表達(dá)式,依此類推,直到添加最后一個下標(biāo)表達(dá)式。 在計(jì)算了最后的 subscripted 表達(dá)式后,將應(yīng)用間接尋址運(yùn)算符 (*),除非最終指針值將為數(shù)組類型尋址。
具有多個下標(biāo)的表達(dá)式引用多維數(shù)組的元素。 多維數(shù)組是其元素為數(shù)組的數(shù)組。 例如,三維數(shù)組的第一個元素是一個具有兩個維度的數(shù)組。 以下示例聲明并初始化字符的簡單二維數(shù)組:
// expre_Subscript_Operator.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;
#define MAX_ROWS 2
#define MAX_COLS 2
int main() {
char c[ MAX_ROWS ][ MAX_COLS ] = { { 'a', 'b' }, { 'c', 'd' } };
for ( int i = 0; i < MAX_ROWS; i++ )
for ( int j = 0; j < MAX_COLS; j++ )
cout << c[ i ][ j ] << endl;
}
正下標(biāo)和負(fù)下標(biāo)
數(shù)組的第一個元素是元素 0。 C++ 數(shù)組的范圍是從 array[0] 到 array[size – 1]。 但是,C++ 支持正負(fù)下標(biāo)。 負(fù)下標(biāo)必須在數(shù)組邊界內(nèi);否則結(jié)果不可預(yù)知。 以下代碼顯示了正數(shù)組和負(fù)數(shù)組下標(biāo):
#include <iostream>
using namespace std;
int main() {
int intArray[1024];
for (int i = 0, j = 0; i < 1024; i++)
{
intArray[i] = j++;
}
cout << intArray[512] << endl;// 512
int *midArray = &intArray[512]; // pointer to the middle of the array
cout << midArray[-256] << endl; // 256
cout << intArray[-256] << endl; // unpredictable
}
上一行中的負(fù)下標(biāo)可能產(chǎn)生運(yùn)行時錯誤,因?yàn)樗趦?nèi)存中指向比數(shù)組的原點(diǎn)低 256 個字節(jié)的地址。 指針 midArray 會初始化為 intArray 的中點(diǎn);因此可以對其使用正數(shù)組和負(fù)數(shù)組索引。 數(shù)組下標(biāo)錯誤不會產(chǎn)生編譯時錯誤,但它們會產(chǎn)生不可預(yù)知的結(jié)果。
下標(biāo)運(yùn)算符是可交換的。 因此,只要沒有重載下標(biāo)運(yùn)算符(請參閱重載運(yùn)算符 ),表達(dá)式 array[index] 和 array[array] 就一定等效。 第一種形式是最常見的編碼做法,但它們都有效。
欄 目:C語言
下一篇:深入解析C++中的動態(tài)類型轉(zhuǎn)換與靜態(tài)類型轉(zhuǎn)換運(yùn)算符
本文標(biāo)題:詳解C++中二進(jìn)制求補(bǔ)運(yùn)算符與下標(biāo)運(yùn)算符的用法
本文地址:http://www.jygsgssxh.com/a1/Cyuyan/2559.html
您可能感興趣的文章
- 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
- 04-02c語言中對數(shù)函數(shù)的表達(dá)式 c語言中對數(shù)怎么表達(dá)
- 04-02c語言沒有round函數(shù) round c語言
- 04-02C語言中怎么打出三角函數(shù) c語言中怎么打出三角函數(shù)的值
- 01-10求子數(shù)組最大和的解決方法詳解
- 01-10深入二叉樹兩個結(jié)點(diǎn)的最低共同父結(jié)點(diǎn)的詳解
- 01-10數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)- 解析最少換車次數(shù)的問題詳解
- 01-10數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-用棧實(shí)現(xiàn)表達(dá)式求值的方法詳解
- 01-10HDOJ 1443 約瑟夫環(huán)的最新應(yīng)用分析詳解
- 01-10深入理解C++中常見的關(guān)鍵字含義


閱讀排行
本欄相關(guān)
- 04-02c語言函數(shù)調(diào)用后清空內(nèi)存 c語言調(diào)用
- 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
- 04-02c語言的正則匹配函數(shù) c語言正則表達(dá)
- 04-02c語言用函數(shù)寫分段 用c語言表示分段
- 04-02c語言中對數(shù)函數(shù)的表達(dá)式 c語言中對
- 04-02c語言編寫函數(shù)冒泡排序 c語言冒泡排
- 04-02c語言沒有round函數(shù) round c語言
- 04-02c語言分段函數(shù)怎么求 用c語言求分段
- 04-02C語言中怎么打出三角函數(shù) c語言中怎
- 04-02c語言調(diào)用函數(shù)求fibo C語言調(diào)用函數(shù)求
隨機(jī)閱讀
- 04-02jquery與jsp,用jquery
- 01-10delphi制作wav文件的方法
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 08-05DEDE織夢data目錄下的sessions文件夾有什
- 01-11ajax實(shí)現(xiàn)頁面的局部加載
- 08-05織夢dedecms什么時候用欄目交叉功能?
- 01-10C#中split用法實(shí)例總結(jié)
- 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改
- 01-10使用C語言求解撲克牌的順子及n個骰子
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文


