C語言八進位制學習小結

2021-07-26 17:50:36 字數 1322 閱讀 5797

讀了一下《c語言陷阱與缺陷》,開篇的乙個介紹便是八進位制。說起來,這個問題在我工作的過程中還確實是遇到過。

在c語言中,以0開頭的數字被識別為八進位制。簡單寫一段**如下:

1 #include

"stdio.h"

2 3

intvar1 =

123;

4 int

var2 =

0123;5 

6 int

main(

void)7

編譯執行結果:

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

intvar1 =

789;

4 int

var2 =

0789;5 

6 int

main(

void)7

編譯與執行:

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

thread model: posix

installeddir: /library/developer/commandlinetools/usr/bin

不像之前用過的gcc,這次沒有gcc的版本資訊,不過裡面的資訊在使用python的時候倒是看到過。

由以上資訊可以看出,其實mac裡面提供的gcc編譯器並不是gcc而是乙個相容gcc功能的乙個編譯器。

2 23 八進位制

題目描述 輸入乙個整數,將其轉換成八進位制數輸出。輸入描述 輸入包括乙個整數n 0 n 100000 輸出描述 可能有多組測試資料,對於每組資料,輸出n的八進位制表示數。示例1 輸入 789 輸出 7 1011 include using namespace std intmain result i...

八進位制小數

描述 八進位制有限小數均可以用十進位制有限小數精確地表示。比如,八進位制裡面的0.75等於十進位制裡面的0.963125 7 8 5 64 所有小數點後位數為n的八進位制小數都可以表示成小數點後位數不多於3n的十進位制小數。你的任務是寫乙個程式,把 0,1 之間的八進位制小數轉化成十進位制小數。輸入...

c 八進位制 轉 十進位制

概述 其實x進製轉十進位制的演算法都差不多,不過如果是針對於字元形式,他們卻有點不同.使用指標和陣列的形式計算,又不同.這裡演示將字元型的陣列形式的八進位制轉成十進位制 1 include 2 include 3 include 4 5 define max 10 67 初始化陣列為八進位制.8vo...