01/10/2018, 00:32
Phép ~ trong java
byte x = 3;
x = (byte)~x;
System.out.println(x);
Cho mình hỏi vì sao x lại ra 4 vậy ạ. Coi trên mạng thì chỉ nói ~ là phép NOT
Bài liên quan
byte x = 3;
x = (byte)~x;
System.out.println(x);
Cho mình hỏi vì sao x lại ra 4 vậy ạ. Coi trên mạng thì chỉ nói ~ là phép NOT
Ở đây, kiểu byte là 8 bit, mình biểu diễn nhị phân 8 bit:
3 thành dạng nhị phân (binary) là: 00000011
Phép ~ là phép NOT trong bit (~0 là 1 và ~1 là 0).
~3 = 11111100 tương đương -4. Số 1 ngoài cùng bên trái dành cho dấu, nếu là số 0 thì số đó dương, số 1 là số âm.
Cảm ơn câu trả lời trên ạ, nhưng cách tính giá trị ép kiểu về bằng tay có thể chỉ thêm ko ạ. Có phải 11111100 =252 nhưng bị ép về byte nên 252-128=124
do 1 bit biểu diễn giá trị âm là 2^7 =128 nên lấy 128-124=4 --> giá trị ép về là -4 phải ko ạ
Lấy 7 bit còn lại
đảo bit và + 1 là ra số âm.
1000 0001
lấy 7 bit cuối là 000 0001 đảo bit thành 111 1110 + 1 vào thành 111 1111 (127)
-> 1000 0001 = -127
-x = ~x + 1 (với x là số nguyên)
cứ thế mà tính lẹ thôi. Cái này là công thức tính 2’s complement hay bù 2 gì đó.
Dù bị ép kiểu mất dữ liệu thì công thức này còn đúng ko ạ
-127 rồi sao ra kq đúng là -4 vậy bạn
Ặc, sorry bạn. Làm như txtntxt nói là đúng ấy.
00000011 là 3 mà -3 cũng là 00000011 hả?
Không, cái - là dấu gạch đầu dòng đó bạn, mình viết có khoảng trắng mà
sao không dùng dấu khác đi ba…người ta nhìn vào dễ lộn