2012-11-01 34 views
6

Ai có thể nói với các thủ tục nội bộ của mã dưới đây

<? $temp = 0; echo ~$temp; ?> 
    //instead of 1 it displays -1 

Trả lời

1

Bitwise-không (~):

này sẽ đảo ngược các bit của toán hạng của nó. Nếu toán hạng là một giá trị dấu chấm động, nó được cắt ngắn thành một số nguyên trước khi tính toán. Nếu toán hạng nằm trong khoảng từ 0 đến 4294967295 (0xffffffff), toán tử này sẽ được coi là giá trị 32 bit chưa ký. Nếu không, nó được coi là giá trị 64 bit đã ký

Bởi vì bạn thực sự đang xử lý một số nguyên không dấu 32 bit đầy đủ với NOT. Điều đó có nghĩa là bạn không chỉ đơn giản là đảo ngược 0001 nhưng đảo ngược 00000000000000000000000000000001

mà trở nên 11111111111111111111111111111110

về cơ bản đây là số + 1 và phủ nhận. do đó, 1 trở thành - (num + 1) là -1 hoặc trong hệ nhị phân (unsigned)

ví dụ: - $ temp = 1; echo ~ $ temp; print -2 // - (n ++)

4
echo ~$temp; 
    ^bitwise not operator 

Giả sử 32-bit, Bitwise nghịch đảo của 0000FFFF (Tất cả 1 's) là -1, trong trường hợp đã ký int của.


Một cách khác để nhìn vào nó: Điều gì ~ đã làm là cung cấp cho bạn (One's complement)

Để có được những tiêu cực của một số, bạn hãy bổ sung của 2, mà chỉ là các 1's complement + 1

Vì vậy,

(1's complement of 0) + 1 = 0 //negative 0 is 0 
hence, 1's complement of 0 = -1 
+0

Câu trả lời hay từ Cthulhu. –

+0

dấu hiệu khá quan trọng;) – Christoph

0

~0-1.

~ nhà điều hành hoàn nguyên mọi bit của 0.

Mối quan hệ là: -$temp === ~$temp + 1

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