Biểu thức nào sau đây cho x có giá trị dương:
Trả lời:
Đáp án đúng: A
Câu hỏi này kiểm tra kiến thức về toán tử dịch bit không dấu `>>>` trong Java. Toán tử này dịch các bit sang phải và điền các bit trống ở phía bên trái bằng số 0. Điều này đảm bảo kết quả luôn là một số không âm.
* **Đáp án A:** `int x = -1; x = x >>> 5;`
* `x = -1` (dạng nhị phân là tất cả các bit đều là 1).
* `x >>> 5` dịch các bit của `x` sang phải 5 vị trí, điền các bit bên trái bằng 0. Vì `x` là một số nguyên 32 bit, kết quả sẽ là một số dương lớn.
* **Đáp án B:** `int x = -1; x = x >>> 32;`
* `x = -1` (dạng nhị phân là tất cả các bit đều là 1).
* `x >>> 32` dịch các bit của `x` sang phải 32 vị trí. Vì Java chỉ sử dụng 5 bit cuối cùng của toán hạng bên phải cho `int`, nên `x >>> 32` tương đương với `x >>> 0`, tức là không dịch gì cả. Giá trị của `x` vẫn là -1.
* **Đáp án C:** `byte x = -1; x = x >>> 5;`
* `byte x = -1` (dạng nhị phân là tất cả các bit đều là 1).
* `x >>> 5`: Đầu tiên, `x` được chuyển đổi thành `int` (mở rộng dấu), do đó nó trở thành `-1` kiểu `int`. Sau đó, `x >>> 5` hoạt động như trong đáp án A, cho ra một số dương lớn. Tuy nhiên, vì kiểu trả về là `byte`, giá trị này sẽ bị cắt ngắn để phù hợp với một `byte`. Vì số này lớn hơn phạm vi của `byte`, kết quả cuối cùng sẽ bị sai lệch và không chắc chắn là dương.
* **Đáp án D:** `int x = -1; x = x >> 5;`
* `x = -1` (dạng nhị phân là tất cả các bit đều là 1).
* `x >> 5` dịch các bit của `x` sang phải 5 vị trí, điền các bit bên trái bằng bit dấu (trong trường hợp này là 1). Kết quả vẫn là một số âm.
Vậy, chỉ có đáp án A đảm bảo `x` có giá trị dương sau phép toán.





