我想比較兩個十六進制兩個十六進制值(存儲在長)以下 是我的代碼相比於C++
long constant = 80040e14;
if(constant == 80040e14)
cout<<"Success"<<endl;
else
cout<<"Fail!!"<<endl;
在這段代碼中的流量控制總是返回到別的部分,任何人都可以請建議如何進行與比較。
感謝
Santhoshaķ
我想比較兩個十六進制兩個十六進制值(存儲在長)以下 是我的代碼相比於C++
long constant = 80040e14;
if(constant == 80040e14)
cout<<"Success"<<endl;
else
cout<<"Fail!!"<<endl;
在這段代碼中的流量控制總是返回到別的部分,任何人都可以請建議如何進行與比較。
感謝
Santhoshaķ
前綴的常數隨加 '0x'。
你的常量只有'e',編譯器會將數字形式:NNNeEEE作爲科學記數法處理。使用'0x'前綴告訴編譯器以下字符采用十六進制表示法。
在您的代碼中,80040e14是8004000000000000000,它太大而不適合32位值,但可以適合64位值。但是,80040e14是一個浮點數,因此比較會將long轉換爲浮點數以使其與常量的類型相同,因此由於浮點代碼的複雜性,這兩個值將會不同。
+1 - 這是所有的最完整的答案。 – Shaihi 2010-07-29 10:34:46
你想比較一個十六進制嗎?
使用0x80040e14
- >注意前綴0x
讓編譯器知道它是十六進制格式。
你編寫它的方式編譯器可能會嘗試將它解析爲一個float(e意味着指數),但我沒有真正嘗試看它是如何處理它的。
Gnu g ++ 4.4.3給出了這樣的警告:「隱式常量轉換中的溢出」 – Kristian 2010-07-29 10:33:07
爲十六進制值,你需要前綴常量0x
否則e
被視爲指數和值被解釋爲一個巨大的十進制值。在你的情況下,很可能這個值不能長時間存儲並溢出。由於這種溢出,您的比較檢查失敗。
你需要把0X在你的十六進制數的前面,C++
比較兩個值使用==操作符。 唯一要考慮的就是告訴編譯器,底座使用值:
十進制:一如既往,你在「現實生活」做寫號。示例:1(一),2(兩個),3(三),...
十六進制:您必須在值後附加0x。示例:0x01(one),0x02(two),0x03(three),...
Binary:Append 0b。例如:0b01(one),0xb10(two),0b11(three)。 編輯:似乎這是不正確的。不要相信這個功能。
在您的例子,只是做:
long constant = 0x80040e14;
if(constant == 0x80040e14L)
cout<<"Success"<<endl;
else
cout<<"Fail!!"<<endl;
80040E14是雙。當分配到一個長時間後,它變成零。 80040e14L是一個長雙。 表達
constant == 80040e14L
促進常數長雙讓你不得不
0.0 == 80040e14
我很驚訝,它編譯 – 2010-07-29 10:32:09
@Binary杞人憂天:它編譯只能用'e'字符(因爲它被視爲指數)。對於每一個其他的十六進制字符它的編譯器錯 – Naveen 2010-07-29 10:33:56
LOL ...........! – 2010-07-29 11:04:00