2009-12-27 46 views

Trả lời

20

Đây là bitwise not operator (còn được gọi là "bổ sung"). Đó là các bit được đặt trong ~ $a là các bit không được đặt trong $a.

Vì vậy, sau đó

E_ALL & ~E_STRICT & ~E_WARNING & ~E_NOTICE 

là các bit đặt trong E_ALL và những người không được thiết lập trong E_STRICT, E_WARNINGE_NOTICE. Điều này về cơ bản nói tất cả các lỗi ngoại trừ các lỗi nghiêm ngặt, cảnh báo và thông báo.

15

Đó là bitwise-not operator. Ví dụ: sự phủ định bitwise của một số có biểu diễn nhị phân 01011110 sẽ là 10100001; mỗi bit được lật ngược lại.

+0

Mặc dù đó là giải thích kỹ thuật, giải thích đó không hữu ích trừ khi bạn nhận ra rằng 'E_STRICT',' E_WARNING', 'E_NOTICE' et. al. là số nguyên và đồng thời được kết hợp với toán tử '&' bitwise. – IQAndreas

1

Xem Bitwise Operators: đó là "không phải là" nhà điều hành (trích dẫn):

~ $a
Bits được đặt trong $a được không được thiết lập, và ngược lại.


Có nghĩa là, lấy một ví dụ lấy cảm hứng từ những gì bạn đăng, mà phần mã này:

var_dump(decbin(E_STRICT)); 
var_dump(decbin(~E_STRICT)); 

sẽ giúp bạn có được kết quả này:

string '100000000000' (length=12) 
string '11111111111111111111011111111111' (length=32) 

(Add a cặp số 0 cho phần đệm ở bên trái của dòng đầu tiên và bạn sẽ thấy ý tôi là gì)


Loại bỏ các đệm khỏi đầu ra thứ hai, bạn sẽ có được:

100000000000 
011111111111 

Có nghĩa là các nhà điều hành ~ đã đưa ra một chút 0 cho mỗi bit tương đương với 1 trong intput - và ngược lại ,

5

Sự khác biệt giữa Bitwise (&, |, ~) và phi Bitwise (& &, ||,!) Khai thác được Bitwise được áp dụng trên tất cả các bit trong số nguyên, trong khi không bitwise xử lý một số nguyên như là một giá trị "true" (không khác) hoặc "false" (zero).

Nói, $flag_1 = 00000001$flag_2 = 00000010.Cả hai sẽ là "true" cho các hoạt động không bitwise, ($flag_1 && $flag_2 là "true"), trong khi kết quả của $flag_1 & $flag_2 sẽ là 00000000 và kết quả của $flag_1 | $flag_2 sẽ là 00000011. ~$flag_2 sẽ là 11111101, khi bitwise AND ANDed to running kết quả sẽ xóa vị trí bit đó (xxxxxx0x). $flag_2 bitwise-ORED cho kết quả đang chạy sẽ đặt vị trí bit đó (xxxxxx1x).

Các vấn đề liên quan