2009-09-27 57 views

Trả lời

40

Đây là Unary ~ Bitwise complement hành (trích dẫn):

  • chỉ được sử dụng với số nguyên giá trị
  • đảo ngược các bit tức là 0-bit trở thành 1-bit và ngược lại
  • trong mọi trường hợp ~ x = (-x) -1

Xem thêm this page on Bitwise operators on wikipedia, trong đó nêu rõ:

Các Bitwise NOT, hoặc bổ sung, là một hoạt động unary mà thực hiện logic phủ định trên mỗi bit, tạo bổ sung các những giá trị cho nhị phân. Chữ số 0 trở thành 1, và ngược lại.
Ví dụ:

NOT 0111 (decimal 7) 
    = 1000 (decimal 8) 

Trong nhiều ngôn ngữ lập trình (bao gồm cả những người trong gia đình C), các Bitwise NOT điều hành là "~" (dấu ngã).

3

Từ các tài liệu chính thức http://java.sun.com/docs/books/tutorial/java/nutsandbolts/op3.html:

Các unary nhà điều hành Bitwise bổ sung "~" đảo ngược một mẫu bit; nó có thể được áp dụng cho bất kỳ loại tích phân nào, làm cho mọi "0" là "1" và mỗi "1" là "0". Ví dụ, một byte chứa 8 bit; áp dụng toán tử này cho một giá trị có mẫu bit là "00000000" sẽ thay đổi mẫu của nó thành "11111111".

8

Như đã nói trước ~ là toán tử NOT bitwise unary.
Ví dụ của bạn kiểm tra xem modifiers có chứa các bit khác với các bit được xác định trong KeyEvent.SHIFT_MASK hay không.

  • ~KeyEvent.SHIFT_MASK - > tất cả các bit ngoại trừ những người trong KeyEvent.SHIFT_MASK được thiết lập để 1.
  • (modifiers & ~KeyEvent.SHIFT_MASK) - > mỗi 1-bit trong modifiers rằng "không thuộc về" để KeyEvent.SHIFT_MASK
  • if ((modifiers & ~KeyEvent.SHIFT_MASK) != 0)-> nếu có ít nhất một bit khác được đặt thành 1 bên cạnh KeyEvent.SHIFT_MASK làm điều gì đó ...
5

Từ trang web của Java http://docs.oracle.com/javase/tutorial/java/nutsandbolts/op3.html

Các unary nhà điều hành Bitwise bổ sung "~" đảo ngược một mẫu bit; nó có thể được áp dụng cho bất kỳ loại tích phân nào, làm cho mọi "0" là "1" và mọi "1" là "0". Ví dụ, một byte chứa 8 bit; áp dụng toán tử này cho một giá trị có mẫu bit là "00000000" sẽ thay đổi mẫu của nó thành "11111111".

Bây giờ, như đã được Pascal MARTIN trả lời trước đó, tại bất kỳ trường hợp nào, vlaue bằng - (x) -1. Ví dụ. ~ 2 = -3, ~ -6 = 5 vv

Ngoài ra, trong java tất cả nguyên dương được lưu trữ như đại diện nhị phân của họ và số nguyên âm được lưu trữ trong giá trị lời khen 2 của một số nguyên dương.

Bây giờ, chúng ta hãy xem làm thế nào nó hoạt động ở mức bit trong trường hợp ~ 2 = -3:

Ban đầu, 2 được lưu trữ trong biểu diễn nhị phân của nó:

0000 0000 0000 0010 

Bây giờ ~ 2 sẽ cho kết quả giá trị (nghịch đảo các bit):

1111 1111 1111 1101 

Làm sao tôi biết nó là -3? Vâng, nó là -3 vì nó có nguồn gốc từ đại diện lời khen 2 của 3.

Như chúng ta đã biết 2 nhân (x) = 1 của (x) + 1 (https://delightlylinux.wordpress.com/2014/10/13/binary-lesson-12-ones-complement-and-twos-complement/)
Mục đích của chúng tôi là nó để tìm x :
1 của (x) = 2 của (x) - 1 (dựa trên biểu hiện trước đó)

Như câu trả lời của chúng tôi là trong là trong lời khen 2,
1 của (x) = 1111 1111 1111 1101 - 0000 0000 0000 0001
1 của (x) = 1111 1111 1111 1100 (Cách trừ - http://sandbox.mc.edu/~bennet/cs110/pm/sub.html)

Vì vậy, khen ngợi giá trị của x = 1 (như câu trả lời chúng tôi đã đại diện cho 1 lời khen của x).
x = 0000 0000 0000 0011
Vì vậy, chúng tôi nhận thấy rằng x là 3 và do đó kết quả trước đây của toán tử ~ 1111 1111 1111 1101 là -3 được viết thành lời khen của 2 là 3.