Menambahkan 10 sen saya ke jawaban ini:
u64
berarti nilai 'unsigned 64 bits', jadi, bergantung pada arsitektur tempat kode akan dijalankan/dikompilasi, kode harus didefinisikan secara berbeda agar benar-benar sepanjang 64 bit.
Misalnya, pada mesin x86, sebuah unsigned long
panjangnya 64 bit, jadi u64
untuk mesin itu dapat didefinisikan sebagai berikut:
typedef unsigned long u64;
Hal yang sama berlaku untuk u32
. Pada mesin x86, unsigned int
panjangnya 32 bit, jadi u32
untuk mesin itu dapat didefinisikan sebagai berikut:
typedef unsigned int u32;
Biasanya Anda akan menemukan typedef
deklarasi untuk jenis ini pada types.h
file yang sesuai dengan arsitektur tempat Anda mengompilasi sumber Anda.
Sering kali saat bekerja dekat dengan perangkat keras atau saat mencoba mengontrol ukuran/format struktur data, Anda harus memiliki kontrol yang tepat atas ukuran bilangan bulat Anda.
Adapun u8
vs uint8_t
, ini hanya karena Linux mendahului <stdint.h>
tersedia di C, yang secara teknis adalah C99-isme, tetapi menurut pengalaman saya tersedia di sebagian besar kompiler modern bahkan dalam mode ANSI-C / C89 mereka.