任何一個(gè)新手都可以看懂的代碼,卻出現(xiàn)一個(gè)小學(xué)數(shù)學(xué)的bug,有哪位大神能告訴我為什么,我真的很惶恐int main(){
//freopen("in.txt","r",stdin);
int Max[2];
for(int i = 0 ; i< 2 ;i++){
Max[i] = -1;
}
string s[2][2];
cin>>s[0][0];
if(s[0][0].length()>Max[0]){
cout<<"string"<<s[0][0]<<"的長(zhǎng)度"<<s[0][0].length()<<"大于"<<Max[0]<<"\n";
}
if(s[0][0].length()<Max[0]){
cout<<"string"<<s[0][0]<<"的長(zhǎng)度"<<s[0][0].length()<<"小于"<<Max[0]<<"\n";
}
}
2 回答

Cats萌萌
TA貢獻(xiàn)1805條經(jīng)驗(yàn) 獲得超9個(gè)贊
原因很簡(jiǎn)單。
string類的length()函數(shù)的返回類型為size_type。而size_type被定義成無(wú)符號(hào)類型,通常就是unsigned int,具體的就得看操作系統(tǒng)。
而int默認(rèn)是有符號(hào)類型。
所以下面這句:
if(s[0][0].length()>Max[0])
實(shí)際上就是 大于號(hào)左邊為無(wú)符號(hào)數(shù),右邊為有符號(hào)數(shù)。
C++里又有一條規(guī)則:當(dāng)有符號(hào)數(shù)與無(wú)符號(hào)數(shù)放在一起運(yùn)算時(shí),總是都轉(zhuǎn)換成無(wú)符號(hào)數(shù)。所以啊,大于號(hào)右邊的-1被轉(zhuǎn)成了無(wú)符號(hào)數(shù),那貌似就是最大無(wú)符號(hào)數(shù)了啊。大于號(hào)不成立就很正常了。
第一次回答問(wèn)題,望采納。
- 2 回答
- 0 關(guān)注
- 1122 瀏覽
添加回答
舉報(bào)
0/150
提交
取消