c - 为什么 017 == 15 在 C 中?

标签 c int endianness

我已经阅读了一些关于字节序及其在 C 语言中的作用的文章,但没有任何内容能真正为我阐明这一点。我刚开始使用 C,我看到了这个例子:

#include <stdio.h>

int main(void) {
    int x = 017;
    int y = 12;
    int diff = x - y;
    printf("diff is %d\n", diff);
    return 0;
}

然后它询问将打印什么。我编译并运行了示例,得到 diff 是 3,所以 x 是 15。我有点明白这是为什么,但如果有人真的为我澄清它,我将不胜感激。

[1] 我寻找过类似的问题,但没有找到任何能彻底解释问题的问题。如果有人可以将我链接到一个也很好。

最佳答案

在数字前加上0 会告诉编译器将其标记为八进制(基数为 8)的数字

就像给它加上前缀 0x 会告诉它使用十六进制(以 16 为底)

例如:

int x = 05;  // 5 in octal
int y = 5;   // 5 in decimal
int z = 0x5; // 5 in hex

关于c - 为什么 017 == 15 在 C 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19485548/

相关文章:

c - 查找寄存器较高位置和较低位置的掩码值

c - Unix c 程序使用线程计算圆周率

c++ - 将uint32_ts和uint_8ts写入char文件,然后将它们转换回uint32_ts和uint_8ts

arrays - 如何在Golang中将字符串类型数组的值映射到int类型数组?

assembly - 小端和汇编命令

c - 井字棋在比较数据时出现 C 错误

c - 将来自一个 header 的函数调用存储在另一个 header 中

Java:Math.pow() 返回零

.net - 让 BitConverter 使用 Big Endian

c - 如何从内存中读取16位值