比较C ++中的两个十六进制值

时间:2010-07-29 10:26:38

标签: c++

我想比较两个十六进制(长存储) 下面是我的代码

long constant = 80040e14;
if(constant == 80040e14)
    cout<<"Success"<<endl;
else
    cout<<"Fail!!"<<endl;

在此代码流控制中总是返回到else部分,任何人都可以建议如何继续进行比较。

由于

Santhosha K

6 个答案:

答案 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