0

有没有办法在c中以十六进制进行算术?还有两个十六进制数字之间的比较,你会怎么做?我还没有看到任何好的例子,如果你有一个会很有帮助的!

4

3 回答 3

1

数学的定义特征之一是 6 * 7 = 42;六 * 七 = XLII;110b * 111b = 101010b。当您的计算机进行数学运算时,处理器如何表示数字并不重要。基地只有在向您(用户)显示数字时才重要。

于 2013-11-10T03:03:45.470 回答
1

你可以直接做。数字只是数字。Base 只是一个数字的表示。

int x = 0xa - 0x3;
printf("%02x\n", x);

您也可以混合碱基格式,因为它们在计算机内部都以相同的方式表示。

// 0 in front for octal
// 0x in front for hexadecimal
x = 2*19 - 023 - 0x13; // x is now 0, as 19 == 023 == 0x13

使用您想要的基础打印它们只是选择格式的问题:

x = 023; // 0x13
printf("%02d\n", x); // Format as decimal
printf("%02o\n", x); // Format as octal
printf("%02x\n", x); // Format as hexadecimal
于 2013-11-10T03:00:30.867 回答
0

“十六进制”只是数字的符号约定(与“十进制”一样)。除了通常的版本外,没有“十六进制算术”。

也就是说,10+16 是 26,即使您将数字写为0x0A + 0x10-- 并且十六进制的答案将是0x1A(幸运的是,这也是“26”)。

也没有必要提供单独的方法来比较十六进制数字——正如评论中所说,数字就是数字;不是“十六进制数”或“八进制数”。试试这个,使用你最喜欢的编译器:

#include <stdio.h>
int main (void)
{
  printf ("10 + 16 = %d\n", 10 + 16);
  printf ("0xa + 0x10 = %x\n", 0xa + 0x10);
  printf ("012 + 020 = %o\n", 012 + 020);
  printf ("10 = 0xa? %d\n", 10 == 0xa);
  printf ("10 = 0x10? %d\n", 10 == 0x10);
  return 0;
}
于 2013-11-10T03:07:49.020 回答