讀了一下《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...