#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++中使用'〜'有什麼用?
#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++中使用'〜'有什麼用?
是的,這是由於按位NOT運算符(~
)和未定義行爲的組合。
基本上,~i
將始終低於5
(當然,不是你的情況0
),因爲它會返回比0
更大的i
值負數。當您達到最大int
號碼時,i++
將會溢出,從而導致未定義的行爲。
在此之前,您將會打印1
,因爲這是*x
返回的結果。
Tilde是按位逆運算符。所以〜0x00000000 = 0xFFFFFFFF或-1。增加我會讓這個運行很長時間,幾十億次迭代。
〜運算符是一個按位NOT。由於int的簽名性質,按位NOT使得數字爲負數,小於5.擺脫它爲你想要做的事情。
~
運算符是BITWISE NOT布爾運算符。所以你的循環是無限的,因爲計數器是一個int32
,並且Bitwise NOT的結果總是一個負數。
「的比特NOT的結果將永遠是一個負數」真的嗎? –
並不總是一般,但在這種情況下是絕對正確的,因爲計數器我從0開始並且是有符號整數。 – Riccardo
它是'Bitwise not'運算符。 –
按位「〜」反轉操作數的位。 – 0x499602D2
cout << * x將始終輸出1.您確定不需要x [i]? – Ian