2012-10-31 44 views
0
#include<iostream.h> 
void main() 
{ 
    int x[]={1,2,3,4,5}; 
    for(int i=0;~i<5;i++) 
     { cout<<*x; 
     } 
} 

當我運行這個程序控制臺顯示有1 無限的數字我不明白這是如何happened.Please好心幫我出這個節目的...... 是,由於波浪運營商,如果其原因那麼如何?在C++中使用'〜'有什麼用?

+3

它是'Bitwise not'運算符。 –

+0

按位「〜」反轉操作數的位。 – 0x499602D2

+0

cout << * x將始終輸出1.您確定不需要x [i]? – Ian

回答

7

是的,這是由於按位NOT運算符~和未定義行爲的組合。

基本上,~i將始終低於5(當然,不是你的情況0),因爲它會返回比0更大的i值負數。當您達到最大int號碼時,i++將會溢出,從而導致未定義的行爲。

在此之前,您將會打印1,因爲這是*x返回的結果。

0

Tilde是按位逆運算符。所以〜0x00000000 = 0xFFFFFFFF或-1。增加我會讓這個運行很長時間,幾十億次迭代。

0

〜運算符是一個按位NOT。由於int的簽名性質,按位NOT使得數字爲負數,小於5.擺脫它爲你想要做的事情。

0

~運算符是BITWISE NOT布爾運算符。所以你的循環是無限的,因爲計數器是一個int32,並且Bitwise NOT的結果總是一個負數。

+0

「的比特NOT的結果將永遠是一個負數」真的嗎? –

+0

並不總是一般,但在這種情況下是絕對正確的,因爲計數器我從0開始並且是有符號整數。 – Riccardo