Apakah ada sesuatu yang istimewa tentang nomor 65535?


11

2¹⁶-1 & 2⁵ = 2⁵ (atau? Jelas?)

Seorang pengembang bertanya kepada saya hari ini apakah bitwise 65535 & 32 yaitu 2¹⁶-1 & 2⁵ =? Mula-mula saya berpikir secara spontan 32 tetapi tampaknya mudah ketika saya berpikir selama beberapa menit dan kemudian menjawab 32. 32 tampaknya merupakan jawaban yang benar tetapi bagaimana? 65535 = 2¹⁶-1 = 111111111111111111 (tapi sepertinya tidak benar karena angka biner ini semuanya adalah -1 (?)), 32 = 100000 tapi saya tidak bisa mengonversinya di kepala saya dimana saya tetap menjawab 32 karena saya punya untuk menjawab sesuatu. Apakah jawabannya 32 sebenarnya sepele? Apakah dengan cara yang sama 2¹⁶-1 & 2⁵-1 = 31? Mengapa pengembang bertanya kepada saya tentang tepatnya 65535?

Biner yang saya diminta untuk mengevaluasi adalah 1111111111111111 & 100000 tapi saya tidak mengerti mengapa 111111111111111111 bukan -1. Bukankah seharusnya -1? Apakah 65535 angka yang memberi kelebihan dan bagaimana saya tahu itu?


3
Pasti ada sesuatu yang istimewa. Itu mengingatkan saya pada 56 6635, standar nasional Ceko untuk bir. Hmmmm ... waktunya minum bir.
joshp

5
Anda membuat terlalu banyak assuptions: 65535 memberikan -1 hanya dalam aritmatika komplemen 16-bit two. Ini memberikan -0 dalam 16-bit aritmatika komplemen seseorang dan 65535 dalam komplemen 32-bit two's dan aritmatika komplemen seseorang.
mouviciel

3
Ini adalah batas atas port TCP.
Renae Lider

Jawaban:


23

Angka diperlakukan sebagai bilangan bulat yang tidak ditandatangani dalam hal ini yang berarti semua bit yang diset tidak akan menghasilkan -1 (jika ditandatangani maka ya, Anda akan benar). Jadi semua 16 bit yang ditetapkan akan memberi Anda 65535.

Yang cukup menarik, keadaan yang ditandatangani bukan merupakan faktor ketika melakukan operasi bit logika. Bit itu sendiri tidak ditandatangani karena merupakan komponen terendah dalam komputer. Ini ditentukan oleh operasi cpu jika bit dalam ex. register akan diperlakukan ditandatangani atau tidak ditandatangani.

Angka negatif dihasilkan dengan mengatur bit paling signifikan (MSB) ke true JIKA angka diperlakukan sebagai ditandatangani ("sisi" mana, atau bit luar mana yang akan diatur bervariasi tergantung pada arsitektur cpu, yaitu big-endian / little-endian ).


9
Sebagian besar mesin modern dikonversi menjadi negatif dengan membalik bit dan menambahkan komplemen satu: 2. Hanya dengan menyetel satu bit memberi Anda masalah memiliki +0 dan -0.
James

1
Itu tidak selalu menjadi masalah. Komplemen 1 memotong ke nol, terlepas dari tanda hasil. Pelengkap 2 memotong menuju -infinity. Dalam aplikasi tertentu, ini dapat membuat Anda kesulitan.
John R. Strohm

18

Ini adalah sepele. 65535 dalam biner adalah semuanya, jadi ANDING dengan X kurang dari 65535 akan memberi Anda X.


10

Menjawab bagian kedua dari pertanyaan Anda. Anda telah menandainya sebagai , 65535 dalam 32 bit 00000000000000001111111111111111, ditandatangani atau tidak, bukan -1.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.