我想比较两个十六进制(长存储) 下面是我的代码
long constant = 80040e14;
if(constant == 80040e14)
cout<<"Success"<<endl;
else
cout<<"Fail!!"<<endl;
在此代码流控制中总是返回到else部分,任何人都可以建议如何继续进行比较。
由于
Santhosha K
答案 0 :(得分:13)
用'0x'作为前缀的常量。
你的常数只有'e',编译器会将形式的数字处理为:NNNeEEE作为科学记数法。使用'0x'前缀告诉编译器以下字符是十六进制表示法。
在你的代码中,80040e14是8004000000000000000这太大而不适合32位值但可以适合64位值。但是,80040e14是一个浮点数,因此比较会将long转换为float,使其与常量相同,因此浮点代码的复杂性会导致两个值不同。
答案 1 :(得分:3)
你需要在C ++中将十六进制数字放在前面
答案 2 :(得分:2)
对于十六进制值,您需要在常量前加0x
,否则将e
作为指数,并将该值解释为巨大的十进制值。在您的情况下,很可能这个值不能存储很长时间而且会溢出。由于此溢出,您的比较检查失败。
答案 3 :(得分:1)
要比较两个值,请使用==运算符。 唯一要考虑的是告诉编译器哪个基数是使用的值:
十进制:像往常一样在“现实生活中”写下数字。示例:1(一),2(两),3(三),......
十六进制:您必须将0x附加到该值。示例:0x01(一),0x02(二),0x03(三),...
二进制:附加0b。示例:0b01(一),0xb10(二),0b11(三)。 编辑:似乎不是这样。不要相信这个功能。
在您的示例中,只需:
long constant = 0x80040e14;
if(constant == 0x80040e14L)
cout<<"Success"<<endl;
else
cout<<"Fail!!"<<endl;
答案 4 :(得分:0)
你想比较一个十六进制吗?
使用0x80040e14
- &gt;注意0x
前缀,让编译器知道它是十六进制格式。
编写它的方式编译器可能会尝试将其解析为float(e表示指数),但我实际上并没有尝试它来查看它是如何处理它的。
答案 5 :(得分:0)
80040e14是双倍的。当分配给长时,它变为零。 80040e14L是一个长双。 表达
constant == 80040e14L
将常量提升为long double,以便
0.0 == 80040e14