2-2.2 運算元與運算子

2011年8月19日 星期五

| | |

2-2.2 運算元與運算子
        在前面的一些範例中,我們常利用數學上的+、-、*、/等符號,來進行一些簡單的運算。事實上,這些符號在程式語言中有其特定的名稱,就是所謂的運算子(operator)。當然,只有運算子的話,是沒辦法處理事情的。這時候,就需要能讓運算子進行處理的數值,就是運算元(operand)。 圖2-11表示運算子與運算元的關係。      

圖2-12

        藉由運算子和運算元的協同合作,我們就可以進行許多運算。像是計算相加(x+y)、相減(x-y)等。這類的運算關係,是由一個運算子連接兩個運算元而成,這樣的運算子就稱為二元運算子(binary operator)。除此之外,java還提供只有一個運算元的一元運算子(unary operator),以及可以同時處理三個運算元的三元運算子(ternary operator)

 [補充] java沒有提供四元或以上的運算子。

        底下的幾個表格,列出一些常見的運算子和用法。


表2-1 加/減運算子(additive operator)
x + y計算 x 加上 y 的結果。
x - y計算 x 減掉 y 的結果。


表2-2 乘/除運算子(multiplicative operator)
x * y計算x 乘上 y 的結果。
x / y計算x 除以  y 的商數。
x % y計算x 除以 y 的餘數。


表2-3 一元運算子(unary operator)
+ x x 的值(通常可省略)。
- x 取x 的負數。


        從表2-2和表2-3中得知,符號"+"和"-"同時具有一元運算子和二元運算子的身分。因此,必須依據他們出現的位置、或是前面是否還有運算元存在,來判定此時所表示的是一元或二元運算子。

Chap2_2_2.java
import java.util.Scanner;

public class Chap2_2_2 {

   public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("請輸入一整數:");
int a = scanner.nextInt(); // 將輸入的數字給a
int b = -a;              // 以變數a的相反值將變數b初始化
int c = a;
System.out.println("------------------------");
System.out.println(a + "的值為" + c + "。");
System.out.println(a + "的相反值為" + b + "。");
   }
}

執行結果
請輸入一整數:5
------------------------
5的值為5。
5的相反值為-5。


請輸入一整數:-5
------------------------
-5的值為-5。
-5的相反值為5。


程式說明:
        程式中的述句int b = -a; ,其中的運算子符號"-",前面沒有其它運算子存在,代表一元運算子。因此,該述句是將a的相反數指定給b。
 
基本資料型態
       在之前的程式,我們都是以整數型態(int)為主。java語言本身提供了豐富的資料型態,使用者如果覺得不夠用的話,還可以自行定義專屬的資料型態。java 語言所提供的標準型態稱為基本資料型態(primitive type),除了常用的整數型態之外,還有浮點數型態(其它的資料型態絴細內容將在第5章討論)
整數型態:
       用來表示整數,代表型態如下:
記憶體配置空間數值範圍
byte1 byte-128~127
short2 byte-32,768~32,767
int4 byte-2,147,483,648~2,147,483,647
long8 byte-9,223,372,036,854,775,808~9,223,372,036,854,775,807

每一種型態所能表示的數值範圍都不同,使用者可以依據需求,選取合適的的型態。
浮點數型態:
       用來表示實數,代表型態如下:
記憶體配置空間數值範圍
float4 byte+-3.40282347E+38~+-1.40239846E-45
double8 byte+-1.79769313486231507E+378~
+-4.94065645841246544E-324


思考題 :
Err2_2_2.java
class Err2_2_2{
    public static void main(String[] args){
            byte n = 300;
            System.out.println(n);
    }
}

錯誤訊息
D:\chap2\err\Err2_2_2.java:3: possible loss of precision
found   : int
required: byte
         byte n = 300;
              ^
1 error

0 意見:

張貼留言