Berapa −5 dalam komplemen dua 8 bit?
11111011 11111011, yaitu 0xFB.
Masukkan bilangan bulat bertanda untuk mendapat sign-magnitude, komplemen satu, komplemen dua, dan biner offset pada lebar 4-64 bit. Atau tempel pola bit atau heks dan lihat kelima pembacaannya. Gratis dan lokal di browser.
Ketik bilangan bulat bertanda. Keempat representasi dihitung sekaligus — Anda tidak perlu tahu lebih dulu yang mana yang dipakai sistem Anda.
| Encoding | Bit | Heks |
|---|---|---|
| Sign-magnitude | 1000 0101 | 85 |
| Komplemen satu | 1111 1010 | FA |
| Komplemen dua | 1111 1011 | FB |
| Biner offset | 0111 1011 | 7B |
Sign-magnitude dan komplemen satu masing-masing menghabiskan satu pola bit untuk nol negatif, sehingga keduanya memuat satu nilai lebih sedikit daripada komplemen dua dan tidak sampai ke bilangan paling negatif.
Anda menemukan sebuah byte di memory dump atau register dan tidak tahu bagaimana seharusnya ia dibaca. Tempel dan lihat artinya di bawah setiap tafsir sekaligus — yang mana yang benar bergantung pada sistem yang menghasilkannya, jadi semuanya ditampilkan.
| Dibaca sebagai | Nilai |
|---|---|
| Tak bertanda | 251 |
| Sign-magnitude | -123 |
| Komplemen satu | -4 |
| Komplemen dua | -5 |
| Biner offset | 123 |
Dihitung oleh mesin yang sama dengan yang dipakai alat di atas, jadi nilai-nilai ini tidak mungkin melenceng darinya.
| Desimal | Sign-magnitude | Komplemen satu | Komplemen dua | Biner offset | Heks |
|---|---|---|---|---|---|
| 127 | 0111 1111 | 0111 1111 | 0111 1111 | 1111 1111 | 7F |
| 100 | 0110 0100 | 0110 0100 | 0110 0100 | 1110 0100 | 64 |
| 10 | 0000 1010 | 0000 1010 | 0000 1010 | 1000 1010 | 0A |
| 5 | 0000 0101 | 0000 0101 | 0000 0101 | 1000 0101 | 05 |
| 1 | 0000 0001 | 0000 0001 | 0000 0001 | 1000 0001 | 01 |
| 0 | 0000 0000 | 0000 0000 | 0000 0000 | 1000 0000 | 00 |
| -1 | 1000 0001 | 1111 1110 | 1111 1111 | 0111 1111 | FF |
| -5 | 1000 0101 | 1111 1010 | 1111 1011 | 0111 1011 | FB |
| -10 | 1000 1010 | 1111 0101 | 1111 0110 | 0111 0110 | F6 |
| -100 | 1110 0100 | 1001 1011 | 1001 1100 | 0001 1100 | 9C |
| -127 | 1111 1111 | 1000 0000 | 1000 0001 | 0000 0001 | 81 |
| -128 | — | — | 1000 0000 | 0000 0000 | 80 |
| Lebar | Komplemen dua / biner offset | Sign-magnitude / komplemen satu |
|---|---|---|
| 4 | -8 … 7 | -7 … 7 |
| 8 | -128 … 127 | -127 … 127 |
| 16 | -32768 … 32767 | -32767 … 32767 |
| 32 | -2147483648 … 2147483647 | -2147483647 … 2147483647 |
| 64 | -9223372036854775808 … 9223372036854775807 | -9223372036854775807 … 9223372036854775807 |
Dibangun dan diverifikasi oleh tim teknik Go Tools.
11111011 11111011, yaitu 0xFB.
-128 … 127 −128 sampai 127 pada komplemen dua; −127 sampai 127 pada sign-magnitude dan komplemen satu.
nilai − 2^n Jika bit teratasnya 0, baca sebagai tak bertanda; jika 1, kurangi pembacaan tak bertandanya dengan 2^n.
−1 atau 255 −1 sebagai byte bertanda, 255 sebagai byte tak bertanda. Bitnya sendiri tidak menentukan.
Komplemen dua menjawab pertanyaan perangkat keras, bukan pertanyaan matematika: bagaimana menyimpan bilangan negatif supaya penjumlah yang sudah terlanjur Anda bangun tetap bekerja? Triknya adalah merepresentasikan −x dengan pola untuk 2^n − x. Penjumlahan lalu berputar modulo 2^n dan mendarat pada jawaban yang benar tanpa kasus khusus untuk tanda, dan karena itu pengurangan tidak memerlukan rangkaian tersendiri.
Dua akibat mengikutinya dan keduanya muncul dalam bug nyata. Pertama, rentangnya tidak simetris: delapan bit mencakup −128 sampai 127, bukan −128 sampai 128, karena polanya harus dibagi habis dan tidak ada nol negatif yang menggenapkan kedua sisi. Kedua, tanda bukanlah bendera yang bisa Anda copot — bit teratas 11111011 bernilai 1, tetapi nilainya −5 dan bukan −123, jadi membaca bilangan negatif berarti menafsirkan seluruh word, bukan menengok satu bit saja.
Sign-magnitude dan komplemen satu adalah dua rancangan yang kalah bersaing. Keduanya tetap layak diketahui karena floating point IEEE 754 mempertahankan tata letak sign-magnitude, dan karena perbandingan itulah yang membuat komplemen dua tampak niscaya alih-alih sekadar sewenang-wenang.
// -5 as an 8-bit byte, three ways to arrive at the same pattern 0b00000101 // 5 ~0b00000101 // 11111010 ones' complement of 5 ~0b00000101 + 1 // 11111011 two's complement = -5 // In JavaScript the width matters: bitwise operators are 32-bit, // so anything wider has to go through BigInt. BigInt.asIntN(8, 0xFBn) // -5n BigInt.asUintN(8, -5n) // 251n BigInt.asIntN(64, 0xFFFFFFFFFFFFFFFBn) // -5n // C23 made two's complement mandatory for signed integers. // Before that, the other two encodings were legal but unused.
Sign-magnitude, komplemen satu, komplemen dua, dan biner offset dihitung bersamaan. Biner offset adalah yang paling sering ditinggalkan kalkulator lain, dan justru itulah yang terus dipakai lembar data ADC.
Tempel bit atau heks yang benar-benar Anda punya dan lihat kelima pembacaannya, termasuk yang tak bertanda. Inilah arah yang Anda butuhkan ketika sebuah dump berselisih dengan angka yang dilaporkan perangkat.
Setiap nilai ditangani dengan BigInt, sehingga 0xFFFFFFFFFFFFFF9C menghasilkan −100 alih-alih apa pun yang keluar dari pemangkasan 32 bit.
Pada lebar 8, −128 tidak punya bentuk sign-magnitude maupun komplemen satu. Tabelnya mengatakan demikian alih-alih mencetak pola yang tidak berarti bilangan itu.
Masukkan 0 dan pola bit kedua untuk nol pada sign-magnitude dan komplemen satu akan ditampilkan — argumen tunggal paling jelas tentang mengapa komplemen dua menang.
Tabel perbandingan 8 bit dan rentang per lebar dirender saat halaman dibangun, oleh mesin yang sama dengan yang menggerakkan kolom interaktif di atas, sehingga keduanya tidak mungkin melenceng satu sama lain.
BigInt.asIntN, int.from_bytes(..., signed=True) milik Python, dan tipe lebar tetap di C memberi jawaban otoritatif untuk kode yang sedang Anda tulis. Pakai itu di dalam kode; pakai halaman ini ketika sebuah nilai ada di depan Anda dan tidak ada interpreter yang terbuka.
Ia menampilkan nilai dengan tipe yang dideklarasikan program, yaitu persis potongan informasi yang tidak dimiliki sebuah pola bit. Ia tidak menolong ketika byte-nya datang lewat kabel tanpa tipe yang dideklarasikan — dan justru kasus itulah yang ditangani halaman ini.
Ia mengonversi antarbasis, tetapi hanya untuk nilai non-negatif — bilangan negatif ditolak secara eksplisit di sana karena sebuah basis tidak punya pendapat tentang bagaimana tanda disimpan. Representasi bertanda adalah tugas halaman ini; pakai konverter basis untuk besarannya.
Padanannya di sisi floating point. Ia mempertahankan tata letak sign-magnitude alih-alih komplemen dua, dan membiaskan eksponennya dengan 2^(e−1)−1, sehingga kedua halaman menjawab pertanyaan yang berbeda tentang satu word memori yang sama.
-5, lebar 8
sign-magnitude 1000 0101 komplemen satu 1111 1010 komplemen dua 1111 1011 (0xFB) biner offset 0111 1011
Ketiga encoding sepakat pada bit tanda dan berbeda pada segala hal lain. Hanya baris komplemen dua yang benar-benar disimpan oleh int8_t di C.
0xFB, lebar 8
tak bertanda 251 sign-magnitude -123 komplemen satu -4 komplemen dua -5 biner offset 123
-128, lebar 8
sign-magnitude tidak ada representasi komplemen satu tidak ada representasi komplemen dua 1000 0000 (0x80) biner offset 0000 0000
Sign-magnitude dan komplemen satu masing-masing menghabiskan satu pola bit untuk nol negatif, sehingga rentangnya −127 sampai 127 dan tidak sampai ke −128. Alat yang mencetak sebuah byte di sini keliru.
0xFFFFFFFFFFFFFF9C, lebar 64
komplemen dua -100 tak bertanda 18446744073709551516
Apa pun yang lebih lebar dari 32 bit harus dikerjakan dengan BigInt. Operator |, <<, dan >>> di JavaScript memangkasnya ke 32 bit tanpa suara, dan itulah sebabnya sebagian kalkulator daring memberi jawaban salah di sini alih-alih menampilkan galat.
4, 8, 16, 32, atau 64. Ini bukan preferensi tampilan — bit yang sama berarti bilangan yang berbeda pada lebar yang berbeda, jadi salah memilih akan mengubah jawabannya.
Ketik bilangan bulat, lengkap dengan tanda minusnya. Keempat encoding diperbarui sambil Anda mengetik, berikut bentuk heksadesimal masing-masing.
Tempel string biner atau nilai 0x ke kolom pembacaan balik untuk melihat arti pola itu di bawah setiap tafsir, termasuk pembacaan tak bertanda.
Halaman ini menandai dua kasus yang paling sering menjegal orang: nilai paling negatif yang tidak punya bentuk sign-magnitude maupun komplemen satu, dan nol yang punya pola bit kedua pada dua encoding tersebut.
Membalik bitnya menghasilkan komplemen satu. Berhenti di situ membuat hasilnya meleset satu dari komplemen dua, dan kesalahan ini mudah terlewat karena hasilnya masih tampak seperti bilangan negatif yang masuk akal.
5 = 00000101 ~5 = 11111010 <- ones' complement, not -5
5 = 00000101 ~5 = 11111010 ~5 + 1 = 11111011 <- -5 in two's complement
JavaScript memangkas operand operator bitwise ke 32 bit. Separuh atasnya lenyap tanpa galat, jadi hasilnya salah alih-alih tidak ada.
0xFFFFFFFFFFFFFFFB // 18446744073709552000 -- the literal is already rounded ~0xFFFFFFFFFFFFFFFB + 1 // 0 -- silently wrong, expected -5
BigInt.asIntN(64, 0xFFFFFFFFFFFFFFFBn) // -5n
Melebarkan dengan mengisi nol hanya mempertahankan bilangannya ketika ia positif. Untuk nilai negatif, bit tanda harus digandakan ke seluruh bit baru.
int8 0xFB (-5) int16 0x00FB (251) <- zero-extended
int8 0xFB (-5) int16 0xFFFB (-5) <- sign-extended
−128 tidak punya representasi sign-magnitude maupun komplemen satu dalam delapan bit, karena kedua encoding itu menghabiskan satu pola untuk nol negatif. Mencetak 10000000 untuknya berarti mengacaukan jawaban komplemen dua dengan encoding yang tidak sanggup menyatakan bilangan itu.
-128 sign-magnitude: 10000000 <- that pattern means -0
-128 sign-magnitude: no representation at width 8 -128 two's complement: 10000000
0xFF9C. Sebagai tak bertanda itu 65436, yang jelas bukan suhu. Pada lebar 16 baris komplemen dua menunjukkan −100, dan dengan faktor skala 0,1 °C sensor itu sedang memberi tahu Anda −10,0 °C.n−1 bit adalah besarannya, dibaca sebagai bilangan tak bertanda biasa. Rentangnya −(2^(n−1)−1) sampai 2^(n−1)−1, simetris, dengan dua nol. Inilah tata letak yang dipakai IEEE 754 untuk floating point.2^n − 1 − x. Rentang dan dua nolnya sama seperti sign-magnitude. Penjumlahannya memerlukan end-around carry, dan justru kerumitan itulah yang dihapus komplemen dua. Letak apostrof dalam ejaan Inggrisnya bukan salah ketik: ones' complement mengacu pada word berisi seluruhnya satu, sedangkan two's complement mengacu pada satu pangkat dua.−x disimpan sebagai 2^n − x. Rentangnya −2^(n−1) sampai 2^(n−1)−1, sengaja tidak simetris, dengan satu nol. Penjumlahan, pengurangan, dan perkalian word bawah semuanya tidak peduli tanda, dan itulah seluruh alasan ia menang.value + 2^(n−1), sehingga −2^(n−1) menjadi seluruhnya nol dan polanya terurut dalam urutan yang sama dengan nilai yang diwakilinya. Ia setara dengan pola komplemen dua yang bit teratasnya dibalik. Hati-hati dengan penamaannya: field eksponen IEEE 754 berbias 2^(e−1)−1, satu lebih kecil daripada offset yang dipakai di sini.&, |, ~, dan operasi geser menjadi bilangan bulat 32 bit sebelum beroperasi lalu mengubahnya kembali sesudahnya, sehingga nilai 64 bit kehilangan separuh atasnya tanpa galat apa pun dimunculkan. Setiap konversi di halaman ini justru dikerjakan pada bilangan bulat presisi sembarang, dan itu pula sebabnya nilai ekstrem 64 bit keluar eksak.−(−128) tetap −128 untuk byte bertanda. Kode apa pun yang menghitung nilai mutlak butuh rencana untuk masukan ini, dan setiap suite pengujian sebaiknya memuatnya.0xFB 8 bit ke field 16 bit sebagai 0x00FB mengubah −5 menjadi 251. Melebarkan nilai bertanda berarti menggandakan bit tandanya, sehingga hasilnya 0xFFFB.BigInt.asIntN di JavaScript, int.from_bytes(..., signed=True) di Python, dan tipe lebar tetap di C menyatakan maksudnya dengan jelas serta menangani kasus tepi. ~x + 1 buatan sendiri adalah asal muasal bug lebar bit.2^n − x, sehingga pengurangan dan penjumlahan memakai rangkaian yang sama dan garis bilangan hanya punya satu nol. 00000101 → 11111010 → 11111011. Langkah membalik saja sudah memberi komplemen satu, dan itulah sebabnya keduanya selalu terpaut satu. n bit ia mencakup −2^(n−1) sampai 2^(n−1)−1, karena ia tidak membuang satu pola untuk nol negatif seperti yang dilakukan sign-magnitude dan komplemen satu. Slot lebih itu jatuh di sisi negatif. int8_t atau uint8_t Anda. value + 2^(n−1), sehingga nilai terkecil menjadi seluruhnya nol dan mengurutkan pola mentahnya sebagai bilangan tak bertanda juga mengurutkan nilai bertandanya. Ia muncul pada keluaran ADC dan DAC serta pada format sampel audio. Perhatikan bahwa eksponen IEEE 754 memakai bias yang berbeda — 2^(e−1)−1, bukan 2^(e−1) — jadi jangan membawa angkanya menyeberang. 65436 sementara yang dimaksud perangkat adalah nilai komplemen dua −100. Tempel 65436 sebagai heks 0xFF9C pada lebar 16 di sini, dan baris komplemen dua menunjukkan pembacaan yang dimaksudkan. ~x + 1 diam-diam kehilangan separuh atas nilai 64 bit dan melaporkan hasil yang masuk akal tetapi salah. Alat ini memakai BigInt sepanjang jalan, dan itulah sebabnya baris 64 bit di sini sesuai dengan yang ditampilkan debugger Anda. 00000000 dan 10000000 sama-sama berarti nol; pada komplemen satu, pasangannya adalah 00000000 dan 11111111. Dua nilai yang seharusnya sama karenanya bisa dianggap tidak sama bit demi bit. Komplemen dua hanya punya satu nol, dan itu menghapus satu kelas kasus khusus perangkat keras sekaligus. Alat Konversi
Konversi antara biner, hex, desimal, oktal, dan basis apa pun (2-36) secara instan. Presisi BigInt, output siap kode. Gratis, privat — tanpa pendaftaran.
Alat Konversi
Konversi permission file Linux antara oktal (755, 644) dan simbol rwx. Dapatkan perintah chmod, deteksi setelan berisiko seperti 777 — gratis, langsung di browser Anda.
Alat Konversi
Konversi HEX ke RGB, HSL, OKLCH, OKLAB, dan CMYK di peramban Anda — salin format apa pun dengan satu klik. Gratis, tanpa daftar, warna Anda tidak pernah meninggalkan halaman.
Alat Konversi
Konversi warna HEX ke CMYK di peramban Anda. Aproksimasi naif berbasis sRGB untuk pratinjau cetak. Gratis, tanpa daftar, warna Anda tetap lokal.
Alat Konversi
Konversi warna hex apa pun ke HSL di peramban Anda — 3 digit, 6 digit, dan 8 digit dengan alpha semuanya didukung. Gratis, instan, tanpa daftar, warna Anda tidak pernah meninggalkan halaman.
Alat Konversi
Konversi HEX ke OKLCH untuk token desain Tailwind v4. Output seragam-perseptual langsung dengan peringatan gamut Display P3. Gratis, hanya di peramban.