Mỗi gía trị dữ liệu trong một máy tính đợc biểu diễn nh là một số nhị phân.
dữ liệu định thớc Giá trị nhỏ nhất
boolean true hoặc false false 1 bit
char Ký tự mã Unicode \u0000 16 bit \u0000 \uFFFF
byte Số nguyên có dấu 0 8 bit -128 127
short Số nguyên có dấu 0 16 bit -32768 32767
int Số nguyên có dấu 0 32 bit -2147483647 2147483648
long Số nguyên có dấu 0 64 bit -9223372036854775808 9223372036854775807
fload Số dấu phẩy động
(chuẩn IEEE 754) 0.0 32 bit ±3.40282347E+38
±1.40239846E-45
doule Số dấu phẩy động
(chuẩn IEEE 754) 0.0 64 bit ±1.79769313486231570E+308
±4.94065645841246544E-324
Bảng A.1: Các kiểu dữ liệu nguyên thuỷ.
Toán tử
Chúng ta đã bàn luận về các toán tử số học (+, -, *, /, %), các toán tử so sánh (==,
!=, <, >, <=, >=), các toán tử logic (!, &&, ||, &, |, ^), cũng nh các toán tử tăng và giảm (++, --). Trong phần này chúng tôi giới thiệu với bạn những kiểu toán tử khác đó là toán tử cấp bit, toán tử điều kiện, và toán tử gán.
Để nắm đợc bản chất của những toán tử cấp bit (bitwise operators), bạn phải hiểu sâu sắc rằng các số trong máy tính đợc biểu diễn dới dạng nhị phân. Các toán tử này kết hợp những cặp số nguyên ở mức cơ sở bit-by-bit. Xem bảng A.2.
Toán tử điều kiện (conditional operator) là một toán tử ba ngôi duy nhất trong Java. Một biểu thức có dạng:
expr1 ? expr2 : expr3
đợc ớc lợng bằng cách ớc lợng expr1 và sau đó trả về giá trị của expr2 hoặc
(x==0) ? y : y/x sẽ trả về giá trị y nếu x là zero, và y/x nếu ngợc lại. Nh vậy một biểu thức:
x = expr1 ? expr2 : expr3;
sẽ tơng đơng với:
if (expr1)
x = expr2;
else
x = expr3;
Toán tử ý nghĩa Ví dụ (trong hệ thập phân và nhị phân)
& : AND cấp bit. Mỗi bit trong kết quả thu đợc từ hai bit tơng ứng trong các tham số bằng cách sử dụng toán tử AND: 1 nếu cả hai bit đều là 1, 0 nếu ngợc lại. 108 & 85 = 68 01101100 & 01010101 = 01000100 | : OR bao gồm cấp bit.
Mỗi bit trong kết quả thu đợc từ hai bit tơng ứng trong các tham số bằng cách sử dụng toán tử OR: 0 nếu cả hai bit đều là 0, 1 nếu ngợc lại. 108 | 85 = 126 01101100 | 01010101 = 01111101 ^ : OR loại trừ cấp bit.
Mỗi bit trong kết quả thu đợc từ hai bit tơng ứng trong các tham số bằng cách sử dụng toán tử OR loại trừ: 0 nếu hai bit giống nhau, 1 nếu ngợc lại.
108 ^ 85 = 57
01101100
^ 01010101
= 00111001
~ : phần bù cấp bit. Mỗi bit trong kết quả thu đợc từ bit tơng ứng trong tham số bằng cách sử dụng toán tử NOT: 0 nếu bit tơng ứng là1, 1 nếu ngợc lại.
~108 = 147
~ 01101100
= 10010011
nhất về bên trái một số lần đợc quy định trong tham số thứ hai (với những số đủ nhỏ, m << n bằng m x 2n). 00111010 << 2 = 11101000 >>> : dịch phải (điền zero).
Dịch các bit trong tham số thứ nhất về bên phải một số lần đợc quy định trong tham số thứ hai (m >>> n bằng m / 2n khi m dơng). 58 >>> 2 = 14 00111010 >>> 2 = 00001110 >> : dịch phải (điền dấu).
Giống nh >>>, trừ việc bit trái nhất (bit dấu) đợc sao lại (m >> n
bằng m / 2n khi m dơng).
58 >> 2 = 14
00111010
>> 2
= 00001110
Bảng A.2: Các toán tử cấp bit.
Các toán tử gán (assignment operators) hỗ trợ một cách viết ngắn gọn cho một vài dạng điều lệnh gán thông thờng, chẳng hạn:
x = x + expression;
sẽ tơng đơng với:
x += expression;
Tất cả các toán tử gán đều làm việc theo cách này. Nếu x là một biến (hoặc một biểu thức có thể xuất hiện hợp lệ ở vế trái một điều lệnh gán) và e là một biểu thức, thì các cách viết sau là tơng đơng:
Gán ngắn gọn Gán đầy đủ x += e x = x + e x -= e x = x – e x *= e x = x * e x /= e x = x / e x %= e x = x % e
x &= e x = x & ex |= e x = x | e x |= e x = x | e x ^= e x = x ^ e x <<= e x = x << e x >>= e x = x >> e x >>>= e x = x >>> e
Trong đó x++ và x--tơng đơng với x += 1 và x -= 1.