Saya sarankan Anda untuk melakukannya persis seperti yang Anda tunjukkan, karena ini adalah yang paling mudah. Inisialisasi -1yang akan selalu bekerja , terlepas dari representasi tanda yang sebenarnya, sementara ~kadang-kadang akan memiliki perilaku yang mengejutkan karena Anda harus memiliki jenis operan yang tepat. Hanya dengan begitu Anda akan mendapatkan nilai jenis yang paling tinggi unsigned.
Untuk contoh kemungkinan kejutan, pertimbangkan yang ini:
unsigned long a = ~0u;
Itu tidak serta merta menyimpan pola dengan semua bit 1 menjadi a. Tapi itu pertama-tama akan membuat pola dengan semua bit 1 dalam unsigned int, dan kemudian menetapkannya a. Apa yang terjadi ketika unsigned longmemiliki lebih banyak bit adalah bahwa tidak semua itu adalah 1.
Dan pertimbangkan yang ini, yang akan gagal pada representasi komplemen bukan-dua:
unsigned int a = ~0; // Should have done ~0u !
Alasan untuk itu adalah bahwa ~0harus membalikkan semua bit. Melawan yang akan menghasilkan -1pada mesin pelengkap dua (yang merupakan nilai yang kita butuhkan!), Tetapi tidak akan menghasilkan -1representasi lain. Pada mesin pelengkap seseorang, hasilnya nol. Jadi, pada mesin komplemen seseorang, yang di atas akan menginisialisasi ake nol.
Hal yang harus Anda pahami adalah itu semua tentang nilai - bukan bit. Variabel diinisialisasi dengan nilai . Jika dalam initializer Anda memodifikasi bit variabel yang digunakan untuk inisialisasi, nilai akan dihasilkan sesuai dengan bit tersebut. Nilai yang Anda butuhkan, untuk menginisialisasi ake nilai setinggi mungkin, adalah -1atau UINT_MAX. Yang kedua akan tergantung pada jenis a- Anda harus menggunakan ULONG_MAXuntuk unsigned long. Namun, yang pertama tidak akan tergantung pada jenisnya, dan itu cara yang bagus untuk mendapatkan nilai tertinggi.
Kita tidak berbicara tentang apakah -1semua bit satu (tidak selalu demikian). Dan kita tidak berbicara tentang apakah ~0semuanya memiliki bit (tentu saja).
Tetapi yang kita bicarakan adalah apa hasil dari flagsvariabel yang diinisialisasi . Dan untuk itu, hanya-1 akan bekerja dengan setiap jenis dan mesin.