如何在C中排序十六进制数(如10 1 A B) ?



我想在C中实现一个排序算法,用于排序十六进制数,如:

10 1 A B

:

1 A B 10

我在这里面临的问题是我不明白A &B小于10,因为在十六进制数中A = 10, B = 11。如果我弄错了,我很抱歉。谢谢你!

在前面的评论中提到,10是0x10,所以这个排序似乎没有问题:0x1 <0 xa & lt;0 xb & lt;0 x10

在任何进制中,两位数字总是大于一位数字。

在十六进制记数法中,我们有比十进制多6位可用的数字,但它们仍然算作一个"数字":

hexadecimal digit | value in decimal representation
A | 10
B | 11
C | 12 
D | 13
E | 14
F | 15

当你得到一个以十六进制表示的数字时,它的数字可能碰巧没有使用上述任何额外的数字,而只是众所周知的0..9位数。这可能令人困惑,因为我们仍然必须将它们视为十六进制。特别是,在多位数十六进制表示中,一个数字必须乘以16的幂(而不是10)才能正确解释。所以当你得到10作为十六进制数时,它的值是1(1)乘以16加0(0),所以十六进制数10的(十进制)值是16。

因此,您给出的十六进制数应按1 <& lt;B & lt;10 .

作为一个更详细的例子,十六进制表示1D6A可以像这样转换为十进制:

1D6A    
│││└─>  10 x 16⁰ =   10
││└──>   6 x 16¹ =   96
│└───>  13 x 16² = 3328
└────>   1 x 16³ = 4096
──── +
7530
同样

10    
│└─>   0 x 16⁰ =    0
└──>   1 x 16¹ =   16
── +
16

最新更新