linux極簡小知識:30、shell中不同進位制的表示和之間的轉換(十進位制、八進位制、十六進位制、二進位制、任意進位制)

語言: CN / TW / HK

highlight: agate theme: channing-cyan


小知識,大挑戰!本文正在參與“程式設計師必備小知識”創作活動。

數值的進位制

Bash中數值預設都是十進位制的。

如果想要使用不同的進位制,可採用下面的表示形式:

  • number:沒有任何特殊表示法的數字是十進位制數。
  • 0number:數字0開頭,表示八進位制數。
  • 0xnumber:數字0x開頭,表示十六進位制數。
  • base#number:base進位制的數,通過base指定是幾進位制。由此,可以表示任意的進位制。

比如下面幾種進位制:

sh $ let a=100 $ let b=0100 $ let c=0x100 $ let d=2#100 $ echo "a=$a,b=$b,c=$c,d=$d" a=100,b=64,c=256,d=4

也可以使用 (()) 獲取進位制值。

進位制轉換

其他進位制轉十進位制

其他進位制轉十進位制不需要特殊處理,獲取值的,其表示形式就是10進位制。

接上面的 a、b、c、d 變數。如下,檢視其取值時為10進位制:

sh $ let b10=b $ let c10=c $ let d10=d $ echo $b10 64 $ echo $c10 256 $ echo $d10 4

十進位制轉其他進位制

十進位制轉其他進位制需要藉助 bc 命令。指定 obase 為幾進位制。

如下,十進位制分別轉8、16、2進位制。

sh $ echo "obase=8;$b10" | bc 100 $ echo "obase=16;$c10" | bc 100 $ echo "obase=2;$d10" | bc 100

其他進位制間的轉換

同樣藉助 bc 命令

sh $ echo "obase=2;$c10" | bc 100000000

「其他文章」