Mencoba menjawab pertanyaan eksplisit (apa itu CHAR_BIT) dan pertanyaan implisit (bagaimana cara kerjanya) di pertanyaan asli.
Sebuah karakter dalam C dan C ++ mewakili unit memori terkecil yang dapat ditangani oleh program C *
CHAR_BIT di C dan C ++ mewakili jumlah bit dalam karakter. Harus selalu minimal 8 karena persyaratan lain pada tipe karakter. Dalam prakteknya pada semua komputer tujuan umum modern tepat 8 tetapi beberapa sistem historis atau spesialis mungkin memiliki nilai yang lebih tinggi.
Java tidak memiliki kesetaraan CHAR_BIT atau sizeof, tidak perlu karena semua tipe primitif di Java memiliki ukuran tetap dan struktur internal objek tidak jelas bagi pemrogram. Jika menerjemahkan kode ini ke Java, Anda cukup mengganti "sizeof (int) * CHAR_BIT - 1" dengan nilai tetap 31.
Dalam kode khusus ini digunakan untuk menghitung jumlah bit dalam sebuah int. Ketahuilah bahwa perhitungan ini mengasumsikan bahwa tipe int tidak berisi bit padding apa pun.
Asumsikan bahwa compiler Anda memilih untuk memperpanjang pada pergeseran bit dari bilangan bertanda tangan dan mengasumsikan sistem Anda menggunakan representasi komplemen 2s untuk angka negatif, ini berarti bahwa "MASK" akan menjadi 0 untuk nilai positif atau nol dan -1 untuk nilai negatif.
Untuk meniadakan bilangan komplemen dua, kita perlu melakukan bitwise not dan kemudian menambahkan satu. Secara seimbang kita dapat mengurangi satu dan kemudian meniadakannya dengan bitwise.
Sekali lagi dengan asumsi representasi pelengkap dua -1 diwakili oleh semua orang, jadi eksklusif atau dengan -1 setara dengan negasi bitwise.
Jadi ketika v adalah nol jumlahnya dibiarkan sendiri, ketika v adalah satu dinegasikan.
Sesuatu yang harus diperhatikan adalah bahwa luapan bertanda di C dan C ++ merupakan perilaku yang tidak ditentukan. Jadi menggunakan implementasi ABS ini pada nilai paling negatif menyebabkan perilaku tidak terdefinisi. Ini dapat diperbaiki dengan menambahkan cast sedemikian rupa sehingga baris terakhir program dievaluasi dalam unsigned int.
* Yang biasanya sama dengan unit memori terkecil yang dapat ditangani oleh perangkat keras. Implementasi berpotensi menggabungkan beberapa unit memori yang dapat dialamatkan perangkat keras ke dalam satu unit memori yang dapat dialamatkan program atau membagi satu unit memori yang dapat dialamatkan perangkat keras menjadi beberapa unit memori yang dapat ditambahkan program.