Biểu diễn nhị phân của False
là 0000000000000000
(số bit được sử dụng tùy thuộc vào việc triển khai). Nếu bạn thực hiện thao tác KHÔNG nhị phân trên nó, nó sẽ được đổi thành 1111111111111111
, tức là True
, nhưng đây là biểu diễn nhị phân của số nguyên đã ký -1
.
Một chút 1
ở vị trí quan trọng nhất báo hiệu số âm cho số đã ký. Thay đổi dấu hiệu của một số xảy ra bằng cách đảo ngược tất cả các bit và thêm 1. Điều này được gọi là Two's complement.
Hãy để chúng tôi thay đổi dấu hiệu của 1111111111111111
. Đầu tiên đảo ngược; chúng tôi nhận được: 0000000000000000
Sau đó thêm một: 0000000000000001
, đây là 1
.
Đây là bằng chứng rằng 1111111111111111
là đại diện nhị phân của -1
.
CẬP NHẬT
Ngoài ra, khi so sánh các giá trị không so sánh
x = -1
hoặc
x = 1
thay vào đó, làm so sánh
x <> 0
điều này luôn mang lại kết quả chính xác, độc lập với quy ước được sử dụng. Hầu hết các triển khai xử lý bất kỳ giá trị bằng nhau bằng không như True
.
Nguồn
2012-01-11 22:27:45
bản sao có thể có của [Truyền một boolean thành số nguyên trả về -1 cho đúng?] (Http://stackoverflow.com/questions/3621037/casting-a-boolean-to-an-integer-returns-1-for -true) – dsolimano
Hằng số Boolean Đúng có giá trị số −1. Điều này là do kiểu dữ liệu Boolean được lưu trữ dưới dạng số nguyên được ký 16 bit. Trong cấu trúc này −1 đánh giá đến 16 nhị phân 1s (giá trị Boolean True) và 0 là 16 0 (giá trị Boolean False). Điều này là rõ ràng khi thực hiện một hoạt động không trên một giá trị số nguyên 16 bit đã ký 0 sẽ trả về giá trị số nguyên −1, nói cách khác là True = Not False. Chức năng này trở nên đặc biệt hữu ích khi thực hiện các phép toán logic trên các bit riêng lẻ của một số nguyên như And, Or, Xor và Not. [7] Định nghĩa này của True cũng phù hợp với BASIC ... –
(Từ bài viết Wikipedia ở đây http: // vi.wikipedia.org/wiki/Visual_Basic) –