JavaScript is required

Biểu thức nào sau đây cho x có giá trị dương:

A.

int x = -1; x = x >>> 5;

B.
int x = -1; x = x >>> 32;
C.

byte x = -1; x = x >>> 5;

D.
int x = -1; x = x >> 5;
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.

Câu hỏi liên quan