- Julia機器學習核心編程:人人可用的高性能科學計算
- 朱紅慶
- 1101字
- 2020-07-28 11:01:34
2.5 Julia中的算術和邏輯運算
本節介紹Julia中的算術和邏輯運算,這與其他編程語言類似。
2.5.1 執行算術運算
在Julia中執行算術運算十分簡單。Julia提供了一整套運算符,比如最常用的二元運算符:+、?、*、/、^和%。
【范例2-21】算術運算
01 julia> a = 10; b = 20; a + b 02 30
代碼01行定義了兩個變量a和b,它們的值分別為10和20,然后進行a+b運算,結果為30。
如下代碼使用一元運算符來反轉數字。
01 julia> -4 02 -4 03 julia> -(-4) 04 4
有一個特殊的操作成員“!”,它可以與布爾類型(Bool)一起使用,用于執行否定操作。
01 julia> !(4>2) 02 false
在代碼01行中,4>2的結果為true,通過“!”運算符將輸出false。
2.5.2 執行按位運算
如表2-3所示為一些不常用的運算符,用于執行按位運算。
表2-3 不常用的運算符

下面舉例說明。
【范例2-22】執行按位運算
01 julia> 100 | 200 02 236 03 julia> ~100 04 -101
在代碼01行中,對100和200執行按位或運算,結果為236。代碼03行將100按位取反,結果為?101。
2.5.3 自更新運算符
Julia也提供了一些自更新運算符,包括:+=、?=、*=、/=。
【范例2-23】自更新運算符
01 julia> x = 4; x += 10 #自增運算 02 14 03 julia> x = 4; x/=2 #自除運算 04 2.0
代碼01行定義了一個變量x,其值為4,并通過“+=”自增運算符,x自增10,結果為14。代碼03行的操作方法與01行類似。
在范例2-23中,x的類型從Int變為Float,是因為自更新運算符將值提升為左側的變量類型。
Julia還提供了一些比較運算符,如==、!=、<、<=、>、>=等。
【范例2-24】比較運算符的使用
01 julia> 100 > 99.9 02 true 03 julia> 24 == 24.0 04 true 05 julia> 24 === 24.0 06 false 07 julia> 24 !== 24.0 08 true
在代碼01行中,100>99.9,返回true。后面的代碼與01行類似。代碼05行中的“===”表示強相等,要求不僅值相等,其類型也需要相同。雖然24與24.0值相等,但是它們的類型不同,所以返回false。
NaN不等于任何值,甚至不等于其本身。
01 julia> NaN == NaN 02 false 03 julia> NaN === NaN 04 true 05 julia> Inf == Inf 06 true 07 julia> Inf >= NaN 08 false
在代碼01行中,NaN與NaN比較結果為false。代碼05行中的Inf表示最大值,值相等及類型相同,所以返回true。代碼07行Inf與NaN比較結果為false,因為NaN不與任何值相等,包括它自己。
2.5.4 運算符的優先級
Julia的運算符有優先級,它們從高到低的順序如表2-4所示。
表2-4 運算符的優先級

2.5.5 類型轉換(數字)
類型轉換是指更改變量的類型,但保持變量的值不變。
【范例2-25】類型轉換
01 julia> Int8(100) #創建一個字長為8位的值 02 100 03 julia> Int8(100*10) 04 ERROR: InexactError() in Int8(::Int64) at ./sysimg.jl:53 05 julia> Int16(100*10) #這個數被解釋為16位 06 1000 07 julia> x = Int32(40); typeof(x) #創建一個Int32類型的變量x 08 Int32 09 julia> x = Int8(x); typeof(x) #使用類型轉換,轉換為8位的Int8 10 Int8
代碼01行使用Int8()函數創建了一個字長為8位的值,沒有錯誤。代碼03行創建了一個Int8類型的值1000,但是由于1000超出了Int8類型的最大值,所以該行代碼將報錯。但是如果將其解釋為Int16類型的值則不會報錯。代碼07行創建了一個Int32類型的變量x,求x的類型,結果為Int32。代碼10行通過Int8()函數將x轉換為Int8類型的變量。
- LabVIEW 2018 虛擬儀器程序設計
- SoapUI Cookbook
- Unreal Engine 4 Shaders and Effects Cookbook
- PySpark Cookbook
- Mastering Unity 2D Game Development(Second Edition)
- 深入解析Java編譯器:源碼剖析與實例詳解
- Android Studio開發實戰:從零基礎到App上線 (移動開發叢書)
- 程序員必會的40種算法
- Drupal 8 Development Cookbook(Second Edition)
- C語言程序設計與應用實驗指導書(第2版)
- Flink入門與實戰
- Effective C++:改善程序與設計的55個具體做法(第三版)中文版(雙色)
- Java EE輕量級解決方案:S2SH
- Java程序設計
- Hands-On ROS for Robotics Programming