Saya telah melihat unsigned
tipe "tanpa tipe" ini digunakan beberapa kali, tetapi tidak pernah melihat penjelasan untuk itu. Saya kira ada signed
tipe yang sesuai . Berikut contohnya:
static unsigned long next = 1;
/* RAND_MAX assumed to be 32767 */
int myrand(void) {
next = next * 1103515245 + 12345;
return((unsigned)(next/65536) % 32768);
}
void mysrand(unsigned seed) {
next = seed;
}
Apa yang telah saya kumpulkan sejauh ini:
- di sistem saya, sizeof(unsigned) = 4
(mengisyaratkan int 32-bit unsigned)
- ini dapat digunakan sebagai singkatan untuk mentransmisikan jenis lain ke versi unsigned:
signed long int i = -42;
printf("%u\n", (unsigned)i);
Apakah ANSI C ini, atau hanya ekstensi kompilator?
long
bukannyalong int
sangat umum jadi saya tidak yakin mengapaunsigned
bukannyaunsigned int
tidak bisa diterima.di C,
unsigned
adalah jalan pintas untukunsigned int
.Anda memiliki yang sama untuk
long
itu adalah jalan pintas untuklong int
Dan juga mungkin untuk mendeklarasikan a
unsigned long
(itu akan menjadi aunsigned long int
).Ini ada dalam standar ANSI
sumber
unsigned
sama sepertiunsigned int
tetapi saya melakukan pencarian di WG14 / N1124 Committee Draft - 6 Mei 2005 ISO / IEC 9899: TC2 untukunsigned
dan tidak dapat menemukan di mana didefinisikan ... dapatkah Anda mengutip bagian yang didefinisikan?Di C dan C ++
unsigned = unsigned int (Integer type) signed = signed int (Integer type)
Integer unsigned yang berisi n bit dapat memiliki nilai antara 0 dan (2 ^ n-1), yaitu 2 ^ n nilai yang berbeda.
Integer unsigned bisa positif atau nol.
Integer yang ditandatangani disimpan di komputer menggunakan komplemen 2.
sumber
Menurut C17 6.7.2 §2:
Jadi jika
unsigned int
kita bisa menulisunsigned
atauunsigned int
, atau jika kita merasa gila ,int unsigned
. Yang terakhir karena standar cukup bodoh untuk memungkinkan "... dapat terjadi dalam urutan apapun, mungkin tercampur". Ini adalah kesalahan bahasa yang diketahui.Penggunaan kode C yang tepat
unsigned int
.sumber
Membawa jawaban saya dari pertanyaan lain .
Dari spesifikasi C , bagian 6.7.2:
Artinya
unsigned
, bila tidak ditentukan jenisnya, harus defaultunsigned int
. Jadi menulisunsigned a
itu sama denganunsigned int a
.sumber