Bà i 4 Toán tá» và biá»u thức hà m toán há»c trong Java
Bài 4: Toán t? và bi?u th?c, hàm toán h?c trong Java
1, Toán t? s? h?c:
?
Ví d?:
L?u ý: V?i 2 câu l?nh a= a+1 và a++ có k?t qu? là nh? nhau, nh?ng v? b?n ch?t có s? khác bi?t:
a = a+1 là gán a b?ng giá tr? a+1, còn phép a++ là t?ng a lên 1, phép a++ ?? t?n tài nguyên h?n, cú pháp ng?n g?n, các b?n nên ch?n cách này ?? ch??ng trình t?i ?u h?n
2, Toán t? trên quan h?, logic:
?
Ví d?:
3, Toán t? trên bit:
?
- ? ki?n th?c c? b?n, chúng ta ch?a nghiên c?u sâu vào nh?ng toán t? này, mình ch? chú ý t?i 2 phép ?ó là d?ch trái, d?ch ph?i. Hi?u c? b?n thì d?ch trái d?ch ph?i n bit cho k?t qu? gi?ng vi?c b?n nhân v?i 2^n và chia cho 2^n (d?ch trái nhân, d?ch ph?i - chia)
- Vd s? 16:
D?ch trái ?i 2 bit thì k?t qu? là nhân 16 x 2^2 = 64
D?ch ph?i ?i 3 bit thì k?t qu? là chia 16 : (2^3) = 2
- V?y t?i sao có phép nhân, phép chia r?i, chúng ta l?i c?n bi?t 2 phép này. Vì 2 phép này ti?t ki?m tài nguyên h? th?ng h?n là b?n dùng phép chia thông th??ng. Nói chung, khi có th?, b?n nên dùng 2 phép này ?? ch??ng trình ch?y nhanh h?n. Nó c?ng th? hi?n tính chuyên nghi?p trong cách l?p trình c?a b?n!
(Ph?n này ?a s? các b?n h?c CNTT c? b?n ??u ???c h?c, mình s? không gi?i thích nhi?u, b?n nào ch?a hi?u có th? tìm trên m?ng xem. N?u th?y không ?n, mình s? vi?t 1 bài vi?t nói v? ph?n này!)
?? bi?t cú pháp và cách s? d?ng 2 phép này, b?n tham kh?o ch??ng trình d??i ?ây:
4, Toán t? ép ki?u:
- Ép ki?u r?ng (widening conversion): t? ki?u nh? sang
ki?u l?n (không m?t mát thông tin)
- Ép ki?u h?p (narrow conversion): t? ki?u l?n sang ki?u
nh? (có kh? n?ng m?t mát thông tin)
<tên bi?n> = (ki?u_d?_li?u) <tên_bi?n>;
B?n hãy tham kh?o ch??ng trình nh? sau:
Ví d?:
PHP:
public class SoHoc {
public static void main(String[] args) {
int a, b, du, nguyen;
a = 10;
b = 3;
du = a % b;
nguyen = a / b;
System.out.println("Ph?n d? (a:b) là: " + du);
System.out.println("Ph?n nguyên (a:b) là: " + nguyen);
a++;
System.out.println("Giá tr? a ?ã t?ng lên 1, giá tr? m?i là: " + a);
b--;
System.out.println("Giá tr? c?a b ?ã gi?m ?i 1, giá tr? m?i là: " + b);
System.out.println("V?i 2 giá tr? a, b m?i trên, Tích (a x b) = " + a * b);
}
}a = a+1 là gán a b?ng giá tr? a+1, còn phép a++ là t?ng a lên 1, phép a++ ?? t?n tài nguyên h?n, cú pháp ng?n g?n, các b?n nên ch?n cách này ?? ch??ng trình t?i ?u h?n

2, Toán t? trên quan h?, logic:
Ví d?:
PHP:
public class QuanHeLogic {
public static void main(String[] args) {
boolean soSanh;
int a, b;
a = 5;
b = 10;
soSanh = (a == b);
System.out.println("K?t qu? so sánh " + a + "=" + b + " không? " + soSanh);
soSanh = (a < b);
System.out.println("K?t qu? so sánh " + a + "<" + b + " không? " + soSanh);
soSanh = (a!=b);
System.out.println("K?t qu? so sánh " + a + "#" + b + " không? " + soSanh);
soSanh = (a >= b);
System.out.println("K?t qu? so sánh " + a + ">=" + b + " không? " + soSanh);
soSanh = (a < b)||(a==b);
System.out.println("K?t qu? so sánh " + a + "<=" + b + " không? " + soSanh);
soSanh = !true;
System.out.println("Bi?n soSanh ???c gán b?ng giá tr? ph? ??nh c?a true, giá tr? ?ó là: "+soSanh);
}
}3, Toán t? trên bit:
- ? ki?n th?c c? b?n, chúng ta ch?a nghiên c?u sâu vào nh?ng toán t? này, mình ch? chú ý t?i 2 phép ?ó là d?ch trái, d?ch ph?i. Hi?u c? b?n thì d?ch trái d?ch ph?i n bit cho k?t qu? gi?ng vi?c b?n nhân v?i 2^n và chia cho 2^n (d?ch trái nhân, d?ch ph?i - chia)
- Vd s? 16:
D?ch trái ?i 2 bit thì k?t qu? là nhân 16 x 2^2 = 64
D?ch ph?i ?i 3 bit thì k?t qu? là chia 16 : (2^3) = 2
- V?y t?i sao có phép nhân, phép chia r?i, chúng ta l?i c?n bi?t 2 phép này. Vì 2 phép này ti?t ki?m tài nguyên h? th?ng h?n là b?n dùng phép chia thông th??ng. Nói chung, khi có th?, b?n nên dùng 2 phép này ?? ch??ng trình ch?y nhanh h?n. Nó c?ng th? hi?n tính chuyên nghi?p trong cách l?p trình c?a b?n!
(Ph?n này ?a s? các b?n h?c CNTT c? b?n ??u ???c h?c, mình s? không gi?i thích nhi?u, b?n nào ch?a hi?u có th? tìm trên m?ng xem. N?u th?y không ?n, mình s? vi?t 1 bài vi?t nói v? ph?n này!)
?? bi?t cú pháp và cách s? d?ng 2 phép này, b?n tham kh?o ch??ng trình d??i ?ây:
PHP:
public class PhepDich {
public static void main(String[] args) {
int a, dichPhai1, dichPhai2, dichTrai1, dichTrai2;
a = 16;
dichTrai1 = a << 1;
dichTrai2 = a << 2;
System.out.println("Giá tr? a ban ??u: " + a);
System.out.println("Khi a d?ch trái 1 bit thì giá tr? là: " + dichTrai1);
System.out.println("Khi a d?ch trái 2 bit thì giá tr? là: " + dichTrai2);
System.out.println(" "); // Xu?ng dòng
dichPhai1 = a >> 1; // D?ch ph?i 1 bit
dichPhai2 = a >> 2; // D?ch ph?i 2 bit
System.out.println("Giá tr? a ban ??u: " + a);
System.out.println("Khi a d?ch ph?i 1 bit thì giá tr? là: " + dichPhai1);
System.out.println("Khi a d?ch ph?i 2 bit thì giá tr? là: " + dichPhai2);
}
}4, Toán t? ép ki?u:
- Ép ki?u r?ng (widening conversion): t? ki?u nh? sang
ki?u l?n (không m?t mát thông tin)
- Ép ki?u h?p (narrow conversion): t? ki?u l?n sang ki?u
nh? (có kh? n?ng m?t mát thông tin)
<tên bi?n> = (ki?u_d?_li?u) <tên_bi?n>;
B?n hãy tham kh?o ch??ng trình nh? sau:
PHP:
Available link for download