C中的十六进制算术

时间:2013-11-10 02:36:51

标签: c math hex

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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

也就是说,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;
}