【问题标题】:Comparing variable to large hex number将变量与大十六进制数进行比较
【发布时间】:2014-11-29 00:57:22
【问题描述】:

我正在从文件中读取原始二进制文件并想检查数字是否为0xFFFFFFFF

#define LAST 0xFFFFFFFF

unsigned long data;
//...give value to data
if(data == LAST)

这与LAST 被定义为4294967295 的结果不同,0xFFFFFFFF 的无符号基数为 10 表示。但是,我注意到如果将0xFFFFFFFF 替换为-1,则会给出正确的结果。这是为什么呢?

【问题讨论】:

  • 算术转换...
  • @KerrekSB 为什么要转换它?因为 0xFFFFFFFF 可以放入 unsigned long 没有问题,所以知道是否正在转换某些东西是不是有点模棱两可。
  • 内置运算符表达式仅在同类类型上定义。您必须有办法将两个操作数转换为通用类型。

标签: c++ math unsigned


【解决方案1】:

您可以做几件事。我将它们都放在一个示例中:

   const unsigned long LAST = 0xFFFFFFFFu ;

将#define 用于常量是不好的形式。

【讨论】:

  • 嗨。你能解释一下吗?
  • U 后缀使常量无符号。使用 const 而不是 #define 会强制值具有类型。
猜你喜欢
  • 2014-08-12
  • 2021-08-26
  • 2011-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-24
  • 2019-07-24
  • 2017-09-27
相关资源
最近更新 更多