Anda dapat mengubah desimal menjadi biner dan biner ke desimal. Tetapi bagaimana Anda bisa mewakili angka "256"?
255 = 11111111
1 byte tidak dapat memiliki lebih dari 8 digit biner (bit). Bagaimana ini mungkin?
Anda dapat mengubah desimal menjadi biner dan biner ke desimal. Tetapi bagaimana Anda bisa mewakili angka "256"?
255 = 11111111
1 byte tidak dapat memiliki lebih dari 8 digit biner (bit). Bagaimana ini mungkin?
Jawaban:
Anda bertanya bagaimana merepresentasikan 256 dalam biner, tapi saya kira Anda bertanya-tanya mengapa orang mengatakan byte dapat menyimpan 256 angka yang berbeda, ketika angka terbesar yang disimpan adalah 255. Seperti kata Claudiop, komputer mulai menghitung pada 0, jadi 0 sebenarnya adalah angka pertama, 1 adalah yang kedua, 2 adalah yang ketiga ... 255 adalah yang ke 256.
Juga, 11111111 hanya 255 untuk byte yang tidak ditandatangani. Ketika Anda memiliki byte yang ditandatangani (nilai yang ditandatangani adalah yang dapat menyimpan nilai negatif), 11111111 sebenarnya -1. Lihat http://en.wikipedia.org/wiki/Two's_complement . Cara komplemen dua bekerja, menambahkan angka negatif ke angka positif menghasilkan 0. Seperti yang orang lain katakan, jika kita menambahkan sedikit ke 11111111, dan tipe data Anda hanya dapat mendukung 8 bit, bit terakhir akan meluap dan meninggalkan Anda dengan 0. Untuk byte yang ditandatangani, nilainya berkisar antara -128 hingga 127. 128 angka negatif + 0 + 127 angka positif = total 256 angka.
Untuk nilai yang ditandatangani, bit pertama adalah bit "tanda". Jika bit ini disetel, angkanya negatif. 10000000 negatif, 01000000 positif, 11111111 negatif, 01111111 positif ...
Jika Anda menggunakan windows (mungkin mac juga memilikinya), Anda dapat membuka kalkulator, beralih ke mode programmer, pilih sbyte, dan bermain-main dengan bit untuk melihat bagaimana mereka berkorelasi dengan representasi desimal mereka.
Yah Anda perlu 2 byte untuk mewakili itu. 256 = 00000001 00000000
Seperti yang sudah Anda ketahui, 255d (desimal) sama dengan 11111111b (biner). Jika sekarang Anda ingin menambahkan 1 ke nilai, ada dua kemungkinan:
Entah Anda hanya memiliki 8 bit. Dalam hal ini, yang disebut overflow terjadi. Jadi "secara internal", angka 1 akan ditambahkan menghasilkan 100000000b (256d dalam 9 bit). Tetapi karena Anda hanya memiliki 8 bit yang tersedia, 8 bit yang lebih rendah akan "dikembalikan". Jadi Anda berakhir dengan 0d = 0b (flag overflow khusus akan ditetapkan pada sebagian besar arsitektur komputer, seperti halnya catatan tambahan.)
Pikirkan ini sama dengan menghitung dengan jari-jari Anda. Bayangkan jari-jari Anda menunjukkan 9d. Sekarang Anda menambahkan satu jari lagi. Anda berakhir dengan 10. Apa yang Anda lakukan jika Anda ingin menambahkan satu lagi?
Kemungkinan lainnya adalah Anda memiliki lebih dari 8 bit. Dalam hal ini Anda cukup menambahkan satu digit lagi ke awal dan hasilnya benar-benar 100000000b = 256d.
Byte adalah "unit" terkecil yang dapat ditangani oleh sistem komputer (sistem memori). Ini berarti bahwa jika Anda hanya ingin tahu satu bit, Anda harus meminta sistem memori untuk memberikan Anda byte tertentu dari suatu alamat dan kemudian Anda harus mencari tahu nilai bit yang Anda minati.
Tetapi dengan cara yang sama seperti 8 bit membuat byte, ada juga tipe data yang lebih besar. 2 byte membuat kata (16 bit), dua kata (empat byte, 32 bit) menjadi kata ganda. Dan arsitektur 64 bit standar saat ini bahkan memiliki tipe data 64 bit (disebut register).
Anda dapat mewakilinya dengan operasi bit shift (kiri atau kanan tergantung pada endianness dari representasi biner). Misalnya liner yang satu ini berfungsi untuk representasi big endian (byte paling signifikan terlebih dahulu):
1 << 8
Byte yang tidak ditandatangani hanya dapat menampung 256 nilai yang mencakup kisaran [0 - 255]. Untuk nilai 256 Anda harus menggunakan tipe data yang dapat menyimpan nilai yang lebih besar, misalnya bilangan bulat.