c - 为什么 C 编程会给出不同的输出?

标签 c output

我得到了意外的输出,但我无法找出原因。

    #include <stdio.h>

    int main() {
        int a = 0100;
        int b = 010;
        int c = 1111;
        int d = 01111;
        printf("0100 => %d, 010 => %d, 1111 => %d, 01111=> %d\n", a, b, c, d);
   }

输出:

0100 => 64, 010 => 8, 1111 => 1111, 01111=> 585 

为什么会出现这样的输出?

最佳答案

在 C 语言中,将 0x0 放在整数文字值之前将导致编译器以 16 进制(十六进制)和 8 进制(八进制)解释该数字,分别。

通常,我们解释和读取以 10 为基数(十进制)的数字。然而,我们有时会使用这些其他基数,因为它们是有用的 2 的幂,可以表示位组(1 个十六进制数字 = 4 位,1 个八进制数字 = 3 位),并且位操作是 C 想要提供的。这就是为什么您会看到像 char 这样的东西用 2 个十六进制数字(例如 0x12)表示,以将单个 char 设置为特定的位序列。

如果您想验证这一点,printf 还允许您使用 %x 以十六进制和八进制输出 int >%o 分别代替 %d

#include <stdio.h>
int main()
{
    int a = 0100;
    int b = 010;
    int c = 1111;
    int d = 01111;
    printf("0100 => %o, 010 => %o, 1111 => %d, 01111=> %o\n", a,b,c,d);
}

如果运行该程序,您将得到以下结果:

gcc -ansi -O2 -Wall main.c && ./a.out
0100 => 100, 010 => 10, 1111 => 1111, 01111=> 1111

...这正是您在程序中设置的值,只是没有前缀。您只是在原始代码中赋值时错误地使用了另一种整数编码,并使用了不同的编码来输出值。

关于c - 为什么 C 编程会给出不同的输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59225557/

相关文章:

java - 将 shell 输出重定向到文件

python - 如何根据用户输入使用类似变量的属性来操作数字输出

c - 在c中打印倒三角形

java - 如何在 C 中使用 Long 数据类型?

CLOCK_MONOTONIC 最大值

Java线程队列与线程池

Java Vector错误输出

python - 如何将计算结果写入python文件?

c - gcc中pkg-config的意义是什么?

c++ - 如何确定 unsigned char* 的长度?