C语言中的十六进制算术

C语言中的十六进制算术,c,math,hex,C,Math,Hex,有没有办法在c中用十六进制进行算术?还有两个十六进制数之间的比较,你会怎么做?我还没有看到任何好的例子,如果你有一个,这将是一个很大的帮助 你可以直接做。数字就是数字。基数只是一个数字的表示 int x = 0xa - 0x3; printf("%02x\n", x); 您也可以混合基本格式,因为它们在计算机内部都表示相同的格式 // 0 in front for octal // 0x in front for hexadecimal x = 2*19 - 023 - 0x13; // x

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

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

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

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

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

也就是说,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;
}
#包括
内部主(空)
{
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);
返回0;
}

数字就是数字。基数只是一个格式问题。你会将十六进制存储为字符串吗?如果不是,那么米奇说了什么。如果你是一个有16个手指的外星人,米奇说:)在任何基础上进行比较都很容易。您只需要知道数字的顺序,并且您使用的是位置表示。您使用的算法与比较以10为基数的数字时使用的算法完全相同(除了有6个漂亮的新数字可供使用)。