2011-01-22 51 views

Trả lời

5

Toán tử ~ là bit nghịch đảo, vì vậy ~ 0 cung cấp cho bạn một giá trị số nguyên với tất cả các giá trị số nguyên (nhị phân).

5

Đó là sự phủ định bitwise của các byte 0000 .... 0000. Đó là giá trị của một số nguyên trong đó tất cả các bit được đặt thành 1.

Trong trường hợp chưa được ký, nó sẽ là giá trị tối đa có thể. Trong một tình huống đã ký nó là -1.

4

~ là toán tử bổ trợ, lật các bit của toán hạng. Vì không có bit nào được thiết lập, phần bổ sung sẽ có tất cả các bit được đặt, cũng là số nguyên có kích thước tối đa (giả sử unsigned). Đối với các con số đã ký, bạn sẽ nhận được -1 thay vào đó, do đó, gọi nó là "tối đa" là một chút nhầm lẫn.

3

Bổ sung bit.
http://msdn.microsoft.com/en-us/library/d2bd4x66.aspx

Chữ cái 0 (như trong mã ở trên) là int.
Một int là một giá trị nhị phân 32 bit. Giá trị 0 có tất cả các bit được đặt thành 0.

Toán tử ~ là một lời khen bitwise. tức là tôi hoán đổi tất cả các bit.
Như tất cả các bit là 0 tất cả chúng đều biến thành 1. Vì vậy, chúng ta có một giá trị 32 bit
với tất cả các bit thiết lập để 1.

C# sử dụng sắc nét 2 lời khen. Mã hóa -1 trong một int như tất cả các bit là 1

0000 0000 0000 0000 0000 0000 0000 0000 == 0 

operator ~ 

1111 1111 1111 1111 1111 1111 1111 1111 == -1 

Vì vậy =>~0 == -1

+0

Curios về phiếu bầu phủ định? –

3

~ nghĩa Bitwise không, nó sẽ đảo ngược tất cả các bit trong số nguyên nhất định. Trong một int đã ký này sẽ cung cấp cho bạn -1 (vì tất cả các bit trong int sẽ được lật từ 0 đến 1.) Tra cứu phần bổ sung của hai để biết thêm thông tin về phần này.

Trong một int unsigned (uint) điều này sẽ cung cấp cho bạn các giá trị lớn nhất của một số nguyên (từ bit quan trọng nhất trong một int unsigned không xác định dấu.)

3

Như đã đề cập, ~ 0 mang lại 0xFFFFFFFF .

Tuy nhiên, tôi nghi ngờ lập trình ban đầu bị nhầm lẫn. thực hiện int max = ~0 ; đặt số nguyên đã ký max thành giá trị -1.

8

Toán tử ~ là toán tử bổ sung bitwise đơn nhất tính toán phần bù bitwise. Điều này có nghĩa là nó đảo ngược tất cả các bit trong đối số của nó (0s trở thành 1s và 1s trở thành 0s). Như vậy,

int max = ~0; 

được thiết max đến sự phủ định giá trị 32-bit 0000 0000 0000 0000 0000 0000 0000 0000 dẫn đến 1111 1111 1111 1111 1111 1111 1111 1111. Vì chúng tôi đang lưu trữ kết quả này trong một Int32, điều này giống như -1.

hay không nó là tốt hơn để nói

int max = ~0; 

hoặc

int max = -1; 

phụ thuộc vào ngữ cảnh. Nếu điểm max là có một số tất cả các bit của chúng là 1 Tôi sẽ chọn số cũ. Nếu điểm của max là để tính toán tối đa của một danh sách các số nguyên không âm, tôi sẽ chọn thứ hai (tốt, tôi muốn int max = Int32.MinValue; và thậm chí nhiều hơn như vậy, tôi chỉ thích int max = list.Max();).

0

Như những người khác đã nêu, ~ là toán tử phủ định bitwise. Nó sẽ lấy tất cả các bit của giá trị số nguyên và Toggles 0 và 1 (0 -> 1 và 1 -> 0).

~ 0 bằng -1 cho số nguyên có dấu hoặc Int32.

Thường hoặc ~ 0 hoặc -1 được sử dụng làm mặt nạ "bao gồm tất cả" (dấu sao) khi bạn triển khai hệ thống lọc dựa trên lớp của một số loại mà bạn sử dụng đối số "layerMask" theo mặc định bằng - 1 nghĩa là nó sẽ trả về bất kỳ thứ gì (không lọc). Bộ lọc thực sự đang sử dụng một phép toán AND (giá trịToFilter & layerMask).

valueToFilter & -1 sẽ luôn khác 0 nếu valueToFilter cũng khác không. Bằng không.