【问题标题】:Can hexadecimal numbers be added/subtracted with decimal numbers?十六进制数可以与十进制数相加/减法吗?
【发布时间】:2015-04-11 07:10:49
【问题描述】:

在 C 中编程时,假设我有整数 h 作为十六进制值,整数 d 作为十进制数。我可以在 h 和 d 之间做加法或减法吗?或者它们必须在同一个数字系统中?

【问题讨论】:

  • 试一试看看! ideone.com 是一个在线编译器,您无需安装任何东西即可使用它来运行这样的小测试程序。
  • 我认为这个问题也混淆了“数字”和“价值”。 0x12、0d18、0o22 和 0b00010010 都是代表相同“值”的“数字”。添加时,您添加的是值,而不是数字。
  • 您对“数字”和“表示”感到困惑。在内部,计算机具有“数字”。在外部(您看到和输入的内容)有“表示”。小数是一种表示。十六进制是一种表示。甚至“Q”也是一种表示。如果您输入十六进制表示和十进制表示(并以某种方式告诉计算机哪个),它们都会在内部转换为“数字”,您可以添加或减去或其他任何内容,而不必担心用于输入数字的表示是否是十六进制或十进制。
  • @HotLicks - 五秒太慢了! :p +1 反正
  • (当然,Pete 使用了“数字”和“值”而不是“表示”和“数字”,但这只是说明术语的定义不是很严格。但区别就在那里不管你怎么称呼他们。)

标签: c binary hex decimal


【解决方案1】:

是的,他们可以,例如

int x;
x = 0x0F + 10;
printf("%d\n", x);

输出:

25

你使用的表示形式无所谓,最终都会全部转换为二进制。

【讨论】:

    【解决方案2】:

    是的,你可以写:

    int x = 100 - 0x100 + 0100;
    

    将十进制与十六进制和八进制混合在一起。无论如何,在计算发生之前,这些值都会全部转换为二进制(编译器将在此示例中进行计算;它不会在运行时进行评估)。并且任何常量都可以被分配了适当值的int 值替换:

    int d = 100;
    int h = 0x100;
    int o = 0100;
    int x = d + h + o;
    

    【讨论】:

    • 喜欢base 10, 16, 8 trio。
    • 为什么如果用十六进制值 0x7fffffff 将 1 添加到 int num 我得到 -2147483648 ,如果我将其更改为 long 我得到正确的数字 2147483648
    • @Zizoo:名义上,这是一个可以单独提出/回答的新问题。如果您正在使用 sizeof(int) == 4 && sizeof(long) == 8(例如 64 位 Unix 系统;但不是 Windows 64)的机器上工作,那么这或多或少就是预期的结果。正式地,当值为 int 时将 1 添加到 0x7FFFFFFF 会导致未定义的行为,因为它包裹过去 (2^31)-1;通常,它更改为 0x80000000,这是最负的 32 位有符号整数的十六进制表示(在 2 的补码机器上)。 [...继续...]
    • [...continuation...] 当您更改为 64 位类型(longlong long 等)时,添加 1 会产生 0x80000000,但仅此而已在正常的值范围内,并在打印为小数时为您提供正数。
    猜你喜欢
    • 2012-05-27
    • 1970-01-01
    • 2019-03-02
    • 2020-02-09
    • 1970-01-01
    • 2011-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多