01/10/2018, 00:29
PHÉP OR trong JAVA
Chào mọi người, mình có vấn đề dưới đây:
int i = 0; boolean t = true; boolean f = false, b; b = (t | ( (i++)== 0));
vì sao chỗ này i ko đc gán i==0 mà khi debug nó vẫn ra là 1 vậy ạ, kết quả là 1 |1 =1
Bài liên quan
biến b của bạn là biến boolean à mà thường phép or trong java là || mà bạn
dạ đây là phép or theo bit đó ạ
yêu cầu của bài toán là gì hả bạn
in ra màn hình giá trị của b
Khi gọi i++ == 0 có nghĩa là sẽ đem i so sánh trước rồi mới tăng lên 1 đơn vị sau. Nếu chỗ này muốn nó trả kết quả false thì em phải ++i thay vì i++.
Btw, phép tử | là or theo bit, thường được dùng để làm điều kiện cho kiểu dữ liệu boolean, short và int còn || mới đúng là or điều kiện.
thay bằng ++i nó vẫn in tra true mà bạn
Mặc dù là nó đã được bỏ trong ngoặc như thế này
(i++)
nhưng nó vẫn làm == trước ạ? mà phép ==0 ở đây là gán hay so sánh ?Gỉa dụ
b = (t ||( (i++)== 0));
thì nó lại đc gán về bằng 0 ???Vẫn chưa hiểu lắm, có thể giải thích thêm đc ko ạ
Mình đoán mò thôi
Mình đoán mò thôi.
true là do cái phần t nó làm cho true: t = true = 1 trong nhị phân (bit) => t | ((i++) ==0) tương đương 1 | 1 => true
Còn tại sao lại là 1 | 1 thì do tính chất toán tử ++. Nếu nó nằm sau biến thì sẽ thực hiện phép so sánh xong rồi mới cộng sau cùng, còn nằm đằng trước biến thì sẽ cộng rồi mới thực hiện phép so sánh.
Phép == là phép so sánh, đừng nhầm lân với phép gán =
theo bạn nói vậy có nghĩa là so sánh vậy nếu thay bằng câu lệnh này
b = (t ||( (i++)== 0));
thì i=0 vậy nghĩa là == là phép gán hay so sánh đây?b = (t ||( (i++)== 0));
vậy tại sao in ra chỗ này i =0 nếu nói như trên là so sánh ==0 rồi ++ thì chỗ này i phải bằng 1 chứ. (CHỖ NÀY LÀ DẤU || KHÁC VỚI CÂU ĐẦU)Câu hỏi khá đấy :D. Nếu chỗ này em sử dụng toán tử || vào thì nó đặc điểm là nếu vế đầu đúng, thì vế sau sẽ không cần phải xử lý nữa (khác với toán tử | , phải xử cả 2 vế). Cho nên em không thấy cái i nó tăng lên 1, để nó tăng lên 1 em có thể sửa t = false.
Cảm ơn câu trả lời vừa rồi của anh ạ. Đã hiểu nhưng còn chỗ này thắc mắc
có phải là do tính chất phép ++ là thực hiện từ phải sang trái ko ạ, hay là: nếu có phép so sánh và phép ++ thì nó thực hiện so sánh trước rồi ++ sau ạ.
Like! ^_^!
Đây là một chú ý khi code được 1 thời gian.
*Mới code
*Code được 1 thời gian
*Code nhiều.
Trong ngoặc trước ngoài ngoặc sau.
Thứ tự ưu tiên toán tử. Tuy nhiên đôi khi có sự không nhất quán trong thực hiện thứ tự phép toán.
Chỗ này do em đặt ++ ở đâu thôi. Đặt trước biến: ++i thì nó gọi là pre-increment. Nó tương đương với code
Còn i++ gọi là post-increment. Nó tương đương với code
Dạ, em cảm ơn nhiều ạ.