C Integer Literals是如何工作的



例如,以下语句如何相等?

a( 0116=0x4E

b( 97=00141=0x0061

c( 45=0x2d=0055

我试着查了一下,但对我来说还是没有意义。谢谢。

如果它以0x0X开头,则它是一个十六进制数,即基数16

否则,如果它只以0开头,它就是一个八进制数,即基数8

否则它是一个十进制数,即以10为基数。

(以下是非标准的-gcc扩展(

如果它以0b开头,则它是一个二进制数,即基数2

以0开头的数字是八进制数以0x开头的数字是十六进制

我们需要区分两种不同的数字系统,在编程时我们这样做

如果你想验证这些等式,你可以自己解决,也可以使用在线转换器。我在下面给你链接

http://calc.50x.eu/

0开头的数字是八进制的。介于0和7之间的八进制数字。以八进制计数:
0, 1, 2, 3, 4, 5, 6, 7, 10, 11, 12, 13, 14, 15, 16, 17, 20, ...

0x0X开头的数字是十六进制(十六进制(。十六进制使用数字和字母值。十六进制计数:
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F, 10, ...

那么01168==0x4E16是怎么回事呢?

C编译器将在0116中看到0,并知道将数字中断为八进制。编译器可以相互检查不同的数字系统,因为我们大多数人需要将它们转换为我们可以更好地理解的东西。

将八进制转换为十进制可以作为函数的∑(对于i=0到n(来完成:aix8i>。在您的示例中:
1x82=64
1x81=8
6x80=6
64+8+6=7810

将十六进制转换为十进制可以使用几乎相同的公式来完成,但您需要将每个字母转换为等价于aix16i>的十进制部分。
4x161=64
14x160=14//E16==1410
64+14=7810

显然,78==78,compilter不需要先进行转换就可以看到这一点。

最新更新