Có điều gì đặc biệt về số 65535 không?


10

2¹⁶-1 & 2⁵ = 2⁵ (hoặc? Rõ ràng?)

Một nhà phát triển đã hỏi tôi hôm nay bit bit là gì 65535 & 32 tức là 2¹⁶-1 & 2⁵ =? Lúc đầu tôi nghĩ 32 nhưng có vẻ dễ dàng, tôi nghĩ trong vài phút rồi trả lời 32. 32 dường như là câu trả lời đúng nhưng làm thế nào? 65535 = 2¹⁶-1 = 1111111111111111 (nhưng có vẻ không đúng vì số nhị phân này tất cả các số phải là -1 (?)), 32 = 100000 nhưng tôi không thể chuyển đổi nó trong đầu. để trả lời một cái gì đó Là câu trả lời 32 trong thực tế tầm thường? Có phải theo cùng một cách 2¹⁶-1 & 2⁵-1 = 31? Tại sao nhà phát triển hỏi tôi về chính xác 65535?

Nhị phân những gì tôi được yêu cầu đánh giá là 111111111111111111 & 100000 nhưng tôi không hiểu tại sao 111111111111111111 không phải là -1. Không phải là -1 sao? 65535 có phải là con số tràn và làm sao tôi biết điều đó?


3
Phải có một cái gì đó đặc biệt. Nó làm tôi nhớ đến 56 6635, tiêu chuẩn quốc gia của Séc về bia. Hmmmm ... thời gian cho một ly bia.
joshp

5
Bạn đưa ra quá nhiều giả định: 65535 chỉ cung cấp -1 trong số học bổ sung hai bit 16 bit. Nó cung cấp -0 trong số học bổ sung 16 bit của một người và 65535 trong phép bổ trợ hai bit 32 bit và phép bổ trợ của một người.
mouviciel

3
Đây là giới hạn trên của các cổng TCP.
Renae Lider

Câu trả lời:


22

Số được coi là số nguyên không dấu trong trường hợp này có nghĩa là tất cả các bit được đặt sẽ không tạo ra -1 (nếu nó được ký thì có, bạn sẽ đúng). Vì vậy, tất cả 16 bit được thiết lập sẽ cung cấp cho bạn 65535.

Thật thú vị, mặc dù, trạng thái đã ký không phải là một yếu tố khi thực hiện các hoạt động logic logic. Bản thân các bit không được ký vì chúng là thành phần thấp nhất trong máy tính. Nó được chỉ định bởi hoạt động cpu nếu các bit trong ex. một thanh ghi sẽ được xử lý ký hoặc không dấu.

Các số âm được tạo ra bằng cách đặt bit có ý nghĩa nhất (MSB) thành đúng NẾU số được coi là đã ký ("bên" hoặc bit bên ngoài nào sẽ được đặt thay đổi tùy theo kiến ​​trúc cpu, ví dụ: end-endian / little endian ).


9
Hầu hết các máy hiện đại chuyển đổi thành âm bằng cách lật các bit và thêm phần bù 1: 2. Chỉ cần thiết lập một bit sẽ cho bạn vấn đề có +0 và -0.
James

1
Đó không hẳn là một vấn đề. Bổ sung 1 cắt ngắn về 0, bất kể dấu hiệu kết quả. Bổ sung của 2 cắt ngắn về phía vô cực. Trong một số ứng dụng, điều này có thể khiến bạn gặp rắc rối.
John R. Strohm

18

Thật tầm thường. 65535 trong nhị phân là tất cả những cái, vì vậy ANDing nó với bất kỳ X nào nhỏ hơn 65535 sẽ cung cấp cho bạn X.


10

Trả lời phần thứ hai của câu hỏi của bạn. Bạn đã gắn thẻ nó là , vì vậy 65535 trong 32 bit là 00000000000000001111111111111111, đã ký hoặc chưa ký nó không phải là -1.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.