Apa perbedaan antara "int" dan "uint" / "long" dan "ulong"?

118

Saya tahu tentang intdan long(angka 32-bit dan 64-bit), tetapi apa itu uintdan ulong?

Perbedaan mesin
sumber

Jawaban:

224

Tipe data primitif yang diawali dengan "u" adalah versi tanpa tanda tangan dengan ukuran bit yang sama. Secara efektif, ini berarti mereka tidak dapat menyimpan angka negatif, tetapi di sisi lain mereka dapat menyimpan angka positif dua kali lebih besar dari rekan mereka yang bertanda tangan. Rekan yang ditandatangani tidak memiliki awalan "u".

Batasan untuk int (32 bit) adalah:

int: 2147483648 to 2147483647 
uint: 0 to 4294967295 

Dan untuk jangka panjang (64 bit):

long: -9223372036854775808 to 9223372036854775807
ulong: 0 to 18446744073709551615
Isak Savo
sumber
12
Ini cukup menyenangkan untuk dilakukan dengan tangan. Variabel bertanda 32-bit menggunakan 1 bit untuk tanda (positif atau negatif) sehingga dapat menyimpan nilai antara -2 ^ 31 dan + 2 ^
31-1
saat membandingkan int dan uint untuk penggunaan, mana yang layak?
Arun Prasad
Apa yang setara dengan c ++?
darkgaze
@JacoPinku ... Itu salah. 8 bit int memiliki rentang dari –128 hingga 127. Bit ke-9 mewakili 256. Jadi dengan 8 bit Anda dapat mewakili semua nilai hingga 255 (val 9 - 1). Kisaran dari -128 hingga 127 memiliki panjang tepat 255. Jadi tidak ada bit yang menahan tanda. Semua nilai hingga 127 positif. Nilai di atas ditampilkan negatif. 255 akan menjadi -1. 254 akan menjadi -2 dan satu cara menjadi 128.
C4d
Saya pikir perlu juga dicatat bahwa khusus untuk int vs uint, unsigned integer tidak sesuai dengan CLS, dan disarankan untuk menggunakan int sesering mungkin.
db2
38

uintdan ulongmerupakan versi tanpa tanda tangan dari intdan long. Itu berarti mereka tidak boleh negatif. Sebaliknya mereka memiliki nilai maksimum yang lebih besar.

Ketik Min Max CLS-compliant
int -2.147.483.648 2.147.483.647 Ya
uint 0 4,294,967,295 No.
panjang –9.223.372.036.854.775.808 9.223.372.036.854.775.807 Ya
ulong 0 18.446.744.073.709.551.615 No.

Untuk menulis sebuah unsigned int literal dalam kode sumber Anda, Anda dapat menggunakan sufiks uatau Umisalnya 123U.

Anda tidak boleh menggunakan uint dan ulong di antarmuka publik Anda jika Anda ingin Mengikuti CLS .

Baca dokumentasi untuk informasi lebih lanjut:

Ngomong-ngomong, ada juga short dan ushort serta byte dan sbyte .

Mark Byers
sumber
Ini menarik - apa maksud Anda tentang kepatuhan CLS? Tautan menuju ke dokumentasi MSDN untuk int. Jika yang Anda maksud dengan "CLS" adalah spesifikasi bahasa C # maka saya tidak mengerti - spesifikasi tersebut dengan jelas menjelaskan uint dan ulong (bagian 1.3)
Isak Savo
1
@Isak Savo: Penting untuk mematuhi CLS jika Anda menulis antarmuka yang dapat digunakan oleh bahasa .NET selain C #.
Mark Byers
Penasaran bahwa Anda menyebutkan pendek dan ushort tetapi tinggalkan byte dan sbyte :)
Roman Starkov
10

uArtinya unsigned, begitu ulongpula sejumlah besar tanpa tanda. Anda dapat menyimpan nilai yang lebih besar dalam ulongdari long, tetapi tidak ada angka negatif yang diperbolehkan.

Sebuah longnilai disimpan dalam 64-bit, dengan digit pertamanya untuk menunjukkan apakah itu bilangan positif / negatif. sementara ulongjuga 64-bit, dengan semua 64 bit untuk menyimpan nomor tersebut. jadi ulong maksimal 2 (64) -1, sedangkan panjang 2 (63) -1.

Cheng Chen
sumber
9

Perbedaannya adalah tipe data uintdan ulongtidak bertanda tangan, yang berarti kisarannya berbeda: Mereka tidak menerima nilai negatif:

int range: -2,147,483,648 to 2,147,483,647
uint range: 0 to 4,294,967,295

long range: 9,223,372,036,854,775,808 to 9,223,372,036,854,775,807
ulong range: 0 to 18,446,744,073,709,551,615
srodriguez
sumber