首页 > 学院 > 开发设计 > 正文

C语言八进制学习小结

2019-11-10 16:53:46
字体:
来源:转载
供稿:网友

读了一下《C语言陷阱与缺陷》,开篇的一个介绍便是八进制。说起来,这个问题在我工作的过程中还确实是遇到过。

在C语言中,以0开头的数字被识别为八进制。简单写一段代码如下:

  1 #include"stdio.h"

  2 

  3 int var1 =123;

  4 int var2 =0123;

  5 

  6 int main(void)

  7 {

  8     PRintf("var1 =%d/n",var1);

  9     printf("var2 =%d/n",var2);

 10    return 0;

 11 }

编译运行结果:

GreydeMac-mini:oct greyzhang$ gcc oct.c 

GreydeMac-mini:oct greyzhang$ ./a.out 

var1 = 123

var2 = 83

从书中看到,有些编译器会把0789这样的数值也会按照八进制的转换方式进行转换。最终的结果为9*(8**0) + 8*(8**1) + 7*(8**2)计算出来。不过在标准C中,这是不允许的。简单测试一下,修改代码:

  1 #include"stdio.h"

  2 

  3 int var1 =789;

  4 int var2 =0789;

  5 

  6 int main(void)

  7 {

  8     printf("var1 =%d/n",var1);

  9     printf("var2 =%d/n",var2);

 10    return 0;

 11 }

编译与运行:

GreydeMac-mini:oct greyzhang$ gcc oct.c 

oct.c:4:14: error: invalid digit '8' in octal constant

int var2 = 0789;

             ^

1 error generated.

查看一下编译器的版本信息:

GreydeMac-mini:oct greyzhang$ gcc -v

Configured with: --prefix=/Library/Developer/CommandLineTools/usr --with-gxx-include-dir=/usr/include/c++/4.2.1

Apple LLVM version 8.0.0 (clang-800.0.42.1)

Target: x86_64-apple-darwin16.4.0

Thread model: posix

InstalledDir: /Library/Developer/CommandLineTools/usr/bin

不像之前用过的gcc,这次没有gcc的版本信息,不过里面的信息在使用Python的时候倒是看到过。

[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.34)] on darwin

由以上信息可以看出,其实Mac里面提供的gcc编译器并不是gcc而是一个兼容gcc功能的一个编译器。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表