2012-06-10 45 views
5

Vì vậy, khi tôi là reading about ~,Tại sao ~ 0 là -1?

Thực hiện toán tử NOT trên mỗi bit.

Vì vậy, tôi đã cố gắng:

0 = 00000000000000000000000000000000 

     so ~0 should be 

~0 = 11111111111111111111111111111111 

Nhưng khi tôi đã cố gắng, nó sẽ trả -1. Không phải là 11111111111111111111111111111111 có phải là 4294967295 bằng số thập phân không?

+1

Trùng lặp: http://stackoverflow.com/questions/3141163/why-do-unsigned-int-x-1-and-int-y-0-have-the-same-binary-representation – copy

+0

@copy - Nó nằm trong 'C' không phải là JavaScript. –

+4

Đó là một điều rất cơ bản áp dụng cho hầu hết các ngôn ngữ lập trình. Đọc http://en.wikipedia.org/wiki/Two%27s_complement hoặc http://stackoverflow.com/a/3141181/1078067 – copy

Trả lời

9

Nó được hiểu là số nguyên đã ký và trong phần bổ sung của hai, số nguyên với tất cả các bit 1 là -1.

+0

Vì vậy, khi bạn chuyển '4294967295' thành nhị phân, sau đó biến nó trở thành số thập phân, nó sẽ trở thành ' -1'? –

+1

Có thể có giá trị bổ sung - trong bổ sung twos, tất cả các bit có cùng giá trị mà chúng sẽ cho một giá trị chưa ký trừ trường hợp có ý nghĩa nhất. Bit quan trọng nhất (MSB) có giá trị của nó bị phủ định so với cùng một bit trong một giá trị chưa ký - ví dụ: đối với số nguyên 32 bit, MSB có giá trị -2147483648 cho bổ sung twos thay vì +2147483648 cho unsigned. – Steve314

+1

Điều đó phụ thuộc vào ngôn ngữ và loại được sử dụng, @Derek. Nếu tôi nhớ hành vi của Javascript một cách chính xác, nếu bạn nhập '4294967295', nó sẽ được coi là một 'số' và được biểu diễn bên trong như một' double', do đó nó sẽ không được chuyển thành '-1' tự động. Nhưng nếu bạn thực hiện các thao tác bit trên nó, nó sẽ được chuyển thành một số nguyên 32 bit (đã ký), và sau đó mẫu bit được hiểu là '-1'. –

6

Một chút-mô hình của tất cả 1 s là 4294967295 cho một số nguyên unsigned, hoặc một số nguyên ký kết với hơn 32-bit. Đối với một số nguyên đã ký với 32-bit được thể hiện là phần bổ sung của hai số-1.

7

Chỉ khi loại chưa được ký. Các số nguyên đã ký sử dụng bit trên cùng làm cờ phủ định - và do đó đặt nó thành 1 kết quả theo số âm. Xem Two's Complement.

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