Linux中的計算機大家或許都用過吧,那你們有沒有遇到過這樣的問題呢?
[root@centos7 ~]#bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty’.
ibase=16
obase=10
10
10
按照正常的理解ibase設置的是輸入的進制數,obase設置的是輸出進制數,16進制的10轉換成10進制應該是16啊,為什么上面的結果卻是10呢?很明顯的跟正確的結果不一樣,也就是說這樣她輸出的結果不對,這肯定不是計算器出毛病了,但是為什么它輸出的結果不對呢,于是我還試了試別的別進制轉換:
[root@centos7 ~]#bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty’.
ibase=16
obase=2
10
10000
上面的執行結果看看明顯是對的啊,那為什么我第一次16進制轉換成10進制的結果卻不對我們想要的結果呢?我問了問度娘,發現有人跟我遇到了同樣的問題,但是他的回答:把obase寫在前面ibase寫在后面,如果位置調換了就會出一系列問題,我趕緊試了一下:
[root@centos7 ~]#bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty’.
obase=10
ibase=16
10
16
哇~?說的果然是對的,你這樣寫還要前面的obase干嘛,不是多此一舉嗎?計算器默認的輸入輸出進制就是十進制??墒菫槭裁聪仍O置ibase=16在設置obase=10得到的結果就不是我們想要的答案呢?于是我又換了把obase的值改了一下,又試了一遍:
[root@centos7 ~]#bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty’.? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ibase=16
obase=A
10
16
是不是發現了什么?都知道A是在16進制中表示的是10進制中的10,而10在16進制中是10進制中的16,這下是不是明白了呢?之所以我們設置ibase=16?obase=10的時候輸出的結果不是我們想要的,是因為ibase=16?下面的obase的值被當做是16進制中的10,也就是10進制中的16,輸入的是十六進制數,輸出的也是十六進制數,所以得到的結果不是我們想要的了。
還是再驗證一下吧:我們把八進制轉成十進制先設置ibase=8,obase=10看看是什么樣的呢?
[root@centos7 ~]#bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty’.
ibase=8
obase=10
10
10
八進制中的10是8,輸入輸出都是8進制所以結果都一樣;八進制中的12是十進制中的10,我們把obase改成12是不是就是轉成十進制了呢?
[root@centos7 ~]#bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty’.
ibase=8
obase=12
10
8
上面的結果顯示是對的,你們是不是明白了呢?不明白的請留言!
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/88395