日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

【原创】linux命令bc使用详解

發布時間:2023/11/27 生活经验 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【原创】linux命令bc使用详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近經常要在linux下做一些進制轉換,看到了可以使用bc命令,如下:

echo "obase=10;ibase=16;CFFF" | bc

用完以后就對bc進行了進一步的了解,?man bc里面有詳細的使用說明。

?

1.是什么,怎么用

bc - An arbitrary precision calculator language ? 一個任意精度的計算器語言

從他的使用上來看,能夠對計算公式的語法進行解釋并返回出結果。有下面幾種使用方式:

1).交互式

輸入bc,進入交互式界面,然后輸入3+1,回車后在下一行打印出了4

?

2).echo+管道

echo "3+1" | bc 返回4到屏幕上

3).bc + 文件名

bc "calc.txt" ? 進入bc交互式界面并自動返回文本內算式的結果

當算術或者語法等出現錯誤時,程序會返回錯誤信息,如下:

1/0
Runtime error (func=(main), adr=3): Divide by zero

?

2.選項  

--help ?-h 顯示選項頁

--interactive?-i 使用交互模式

--mathlib ?-l 執行指定語句前,先加載math函數庫

--warn ?-w 對非POSIX的bc指令給出警告

--standard ?-s 啟動POSIX模式下的bc程序

--quiet ?-q 不顯示GNU bc 的歡迎
--version ?-v 顯示版本信息

?

3.數字、變量、表達式和注釋

3.1數字

  操作基本都是圍繞數字,默認的輸出輸入進制都是十進制。數字有2個屬性 長度(length)和小數點后精度(scale), length值數字有效數字的長度,scale是值小數點后的長度。

如:0.001 length=3 scale=3

? ? 45.78 length=4 scale=2

  關于數字,當使用十六進制時,英文ABCDEF必須大寫,大于16進制的則都用XX的十進制數字代表一位,如C=12

?

3.2 變量

  計算表達式的時候可以用變量,變量名為小寫字母開頭后面可以跟_,1,a。

變量分兩種:

普通變量: a=4;a ? 返回4

數組變量: a[1]=1;a[3]=3;a[1];a[2];a[3] ?返回1 0 3

?

  另外有4個特殊的變量,他們有著特殊的意義,不能當做普通變量用,如下:

1)scale=10; 設置之后的scale為10,默認為0(及整數除法會返回整數)

2)obase=16;ibase=16; 設置輸入和輸出都為16進制,默認值為10

? ? ?注意:為10時可不設置ibase obase的值,obase要盡量放在ibase前,因為ibase設置后,后面的數字都是以ibase的進制來換算的

3)last,是指上一次返回出來的數字

?

3.3 表達式

  表達式跟C語言的都類似,主要就是

1)運算類 + - * / % ++ -- ^等

2)賦值類 = +=

3)關系類 > <= ?其中true則返回1,false返回0

4)布爾類 && || 同上

注: a = 3 < 5 ,C語言中a=false,而bc中a=3,然后返回3<5的結果1??? ? 故一般帶賦值的算式后面盡量都要加括號來確保執行順序

  幾個特殊的表達式:

length(3.5) ? 取length?

scale(3.5) ?取scale

sqrt(9) ? 取根號

read() ?從標準輸入讀

?

3.4 注釋

注釋有兩種:

1)多行注釋 /* */

2)單行注釋#

?

4. 語句(statement) 和 函數

4.1語句

1+1

2+2

等價于1+1;2+2,都會返回兩行 2 ?4 。

但是給變量賦值是不會輸出值得,故1+1;2+2;a=3;b=4 還是返回兩行2 4。

故:分隔符是 分號或者回車,純賦值不會產生輸出,表達式會以obase進制輸出到標準輸出

? ?a=1 無輸出 ? ?(a=1)會輸出1,因為()是表達式

?

1)輸出可以用print, 如print a,b,c,d

2)可使用字符串 "abc\n"

3)其他的話跟C類似 if for while return break continue {}

?

4.2 函數

define [可選void] 函數名(參數列表[如:a, b, array[]]) {

  auto m,n,l;

? ? ?.... return 45;

}

auto 聲明的是局部變量,數組參數用array[]表示,返回值寫了void的就不會打印最終返回值,如下

1               define py (y) { print "--->", y, "<---", "0; }
2               define void px (x) { print "--->", x, "<---", "0; }
3               py(1)
4               --->1<---
5               0
6               px(1)
7               --->1<---

?

?

還有一些數學庫,如s(1), c(1),l(1)等,需要bc -l 在啟動時導入數學庫,此時默認的scale=20

如輸出派 π :echo "4*a(1)" | bc -l ? ?注a(1)表示arctan反正切函數

函數的一個例子:

 1               /* Uses the fact that e^x = (e^(x/2))^2
 2                  When x is small enough, we use the series:
 3                    e^x = 1 + x + x^2/2! + x^3/3! + ...
 4               */
 5 
 6               define e(x) {
 7                 auto  a, d, e, f, i, m, v, z
 8 
 9                 /* Check the sign of x. */
10                 if (x<0) {
11                   m = 1
12                   x = -x
13                 }
14 
15                 /* Precondition x. */
16                 z = scale;
17                 scale = 4 + z + .44*x;
18                 while (x > 1) {
19                   f += 1;
20                   x /= 2;
21                 }
22 
23                 /* Initialize the variables. */
24                 v = 1+x
25                 a = x
26                 d = 1
27 
28                 for (i=2; 1; i++) {
29                   e = (a *= x) / (d *= i)
30                   if (e == 0) {
31                     if (f>0) while (f--)  v = v*v;
32                     scale = z
33                     if (m) return (1/v);
34                     return (v/1);
35                   }
36                   v += e
37                 }
38               }

?

?

5.其他

man bc最后還介紹了一下全局limits,環境變量,版本對比等,這里不累述,有興趣直接里面看吧。

?

6.其他一些計算命令

1)dc ?指令復雜些,更像是老式計算器

2)expr 如expr 3 + 4 ?主要是后面每個數字符號之間都得加空格

3)echo 如echo $((3+4)) echo $((16#CC)) 主要是多加()讓他產生計算的意義

4)awk 如'BEGIN{a=3+2;print a}'

?

小結:

  bc是一個較為完整,提供了完備的類似C的編程語法的計算器,可以在交互式界面、文本或管道的方式方便的進行一些邏輯運算。支持多進制轉換,任意精度調整,打印控制,函數支持,邏輯控制等。有疑惑的地方直接man bc即可有詳細的解釋。

轉載于:https://www.cnblogs.com/vanishfan/p/4359296.html

總結

以上是生活随笔為你收集整理的【原创】linux命令bc使用详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。