C Integer Literals如何工作?

时间:2014-03-12 18:53:31

标签: c integer literals

例如,以下陈述如何相互相等?

a)0116 = 0x4E

b)97 = 00141 = 0x0061

c)45 = 0x2d = 0055

我曾尝试查找它,但它对我来说仍然没有意义。感谢。

3 个答案:

答案 0 :(得分:5)

如果它以0x0X开头,则为十六进制数,即。基地16

否则,如果它仅以0开头,则为八进制数,即。基地8

否则它是十进制数,即。基地10。

(以下是非标准 - gcc扩展名)

如果以0b开头,则为二进制数,即。基地2

答案 1 :(得分:0)

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

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

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

http://calc.50x.eu/

答案 2 :(得分:0)

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

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

那么0116 8 == 0x4E 16 怎么样?

C编译器将在0中看到0116并知道将数字中断为八进制。编译器可以检查彼此不同的数字系统,因为我们(主要是人类)需要将它们转换为我们能够更好理解的东西。

将八进制转换为十进制可以作为函数的Σ(对于i = 0到n)来完成:a i x8 i 。在你的例子中:
1x8 2 = 64
1x8 1 = 8
6x8 0 = 6
64 + 8 + 6 = 78 10

将Hex转换为Decimal可以使用几乎相同的公式完成,但是您需要将每个字母转换为a i 部分的十进制等效值:a i x16
4x16 1 = 64
14x16 0 = 14 // E 16 == 14 10
64 + 14 = 78 10

显然78 == 78,编译器只是不需要先进行转换才能看到。