在撰寫程式的過程中,我們不可避免的一定會用到許多四則運算,像是算圓周率、標準差....等等。
這時候,我們就必須知道 "+"、 "-" 、"*"、 "/" 、"="、"&" 在程式中所代表的意義。
在程式語言中,這些統稱為運算子 -
比較不容易理解的是左移及右移運算子,舉例來說,假設有一個變數a = 1,
而a>>1及a<<1會等於多少呢?
首先,我們要將a拆解為八個位數,原因是因為一個位元組(byte)可以表示0-255 的數字,一個位元(bit)則有0與1的兩種組合,因此,2^8 = 256,就有這麼多組合了。
因此,a = 00000001,而右移1則代表著,這個位元組往右平移1,最右邊的1被刪去,左邊多出來的補0,最後結果為,a = 00000000,換算為十進位數字就變成0了
再來,a = 00000001,而左移1則代表著,這個位元組往左平移1,最左邊邊的0被刪去,左邊多出來的補0,最後結果為,a = 00000010,換算為十進位數字就變成2了。
接下來,我們來看一下Java中奇妙的型態轉換特性囉!
Java的型態轉換分為"自動轉型"與"強制轉型"兩種
1. 自動轉型 -
在自動轉型中,有一個非常重要的特性,叫做 Promote 晉升。
當運算式中包含不同型態數值時,則運算時以長度最長的型態為主,其他數值將會自動promote型態
提升(晉升)有以下特性:
int a = 2;
double b = 0.66;
double c = a * b;
a為int型態(4 bytes) 而 b為double型態(8 bytes),當a與b進行運算時,c自動被promote成double型態。(因為double>int)
short a = 1;
short b = 2;
short c = a + b;
假設你不知道提升的特性,這裡就會報錯了
2. 強制轉型 -
強制轉型的意思就是透過程式手法強迫將不是那個型態的變數轉換成該型態的變數。
例如:
short a =1;
long b = 2;
int c = (int)(a+b);
But! 要注意的是,強制轉型的風險是,把數值範圍比較大的資料強制轉換為數值範圍比較小的型別, 因此有可能在轉型後造成資料數值不正確。
很奇妙吧~~ 如果不知道程式背後的原理,可能會覺得,咦! 這樣宣告明明沒錯R,怎麼會報J個錯誤呢QQ
下一篇將講解何謂流程控制。
Hi, I am Grant.
個人部落格 - https://grantliblog.wordpress.com/
個人網站 - https://grantli-website.netlify.app/#/mainpage
我的寫作專題 - https://vocus.cc/user/5af2e9b5fd89780001822db4#