Apa perbedaan antara int
, System.Int16
, System.Int32
dan System.Int64
selain ukuran mereka?
229
Setiap jenis integer memiliki kisaran kapasitas penyimpanan yang berbeda
Type Capacity
Int16 -- (-32,768 to +32,767)
Int32 -- (-2,147,483,648 to +2,147,483,647)
Int64 -- (-9,223,372,036,854,775,808 to +9,223,372,036,854,775,807)
Seperti yang dikatakan oleh James Sutherland dalam jawabannya :
int
danInt32
memang identik;int
akan menjadi sedikit lebih familiar,Int32
membuat 32-bitness lebih eksplisit bagi mereka yang membaca kode Anda. Saya akan cenderung menggunakan int di mana saya hanya perlu 'bilangan bulat', diInt32
mana ukurannya penting (kode kriptografi, struktur) sehingga pengelola di masa depan akan tahu lebih aman untuk memperbesarint
jika perlu, tetapi harus berhati-hati mengubahInt32
variabel dengan cara yang sama .Kode yang dihasilkan akan sama: perbedaannya adalah murni dari keterbacaan atau penampilan kode.
int16
untuk menghemat sumber daya memori, dibandingkan dengan hanya menggunakanint
?int
adalah selaluInt32
, terlepas dari sistem. Mungkin Anda berpikir tentang C ++?Satu-satunya perbedaan nyata di sini adalah ukuran. Semua tipe int di sini adalah nilai integer yang ditandatangani yang memiliki ukuran berbeda-beda
Int16
: 2 byteInt32
danint
: 4 byteInt64
: 8 byteAda satu perbedaan kecil antara
Int64
dan sisanya. Pada platform 32 bit, penugasan keInt64
lokasi penyimpanan tidak dijamin atom. Dijamin untuk semua jenis lainnya.sumber
Int64
di32 bit Windows Operating System
kemudian apa masalah aku bisa menghadapi? Apakah ada contoh?int
Ini adalah tipe data primitif yang didefinisikan dalam C #.
Itu dipetakan ke Int32 tipe FCL.
Ini adalah tipe nilai dan mewakili struct System.Int32.
Itu ditandatangani dan membutuhkan 32 bit.
Ini memiliki nilai minimum -2147483648 dan maksimum +2147483647.
Int16
Ini adalah tipe FCL.
Dalam C #, pendek dipetakan ke Int16.
Ini adalah tipe nilai dan mewakili System.Int16 struct.
Itu ditandatangani dan membutuhkan 16 bit.
Ini memiliki minimum -32768 dan nilai maksimum +32767.
Int32
Ini adalah tipe FCL.
Di C #, int dipetakan ke Int32.
Ini adalah tipe nilai dan mewakili struct System.Int32.
Itu ditandatangani dan membutuhkan 32 bit.
Ini memiliki nilai minimum -2147483648 dan maksimum +2147483647.
Int64
Ini adalah tipe FCL.
Dalam C #, lama dipetakan ke Int64.
Ini adalah tipe nilai dan mewakili struct System.Int64.
Itu ditandatangani dan membutuhkan 64 bit.
Memiliki nilai minimum –9.223.372.036.854.775.808 dan maksimum 9.223.372.036.854.775.780.
sumber
Int64
tipe data dapat direpresentasikan menggunakanL
ataul
sufiks sementaraInt16
atauInt32
belum sufiks dalam C #.Menurut Jeffrey Richter (salah satu kontributor pengembangan .NET framework) buku 'CLR via C #':
int adalah tipe primitif yang diizinkan oleh kompiler C #, sedangkan Int32 adalah tipe Library Class Framework (tersedia lintas bahasa yang mematuhi CLS). Faktanya, int menerjemahkan ke Int32 selama kompilasi.
Juga,
Saya telah melihat penulis ini, dan banyak literatur standar tentang .NET lebih memilih tipe FCL (yaitu, Int32) daripada tipe primitif spesifik bahasa (yaitu int), terutama pada masalah interoperabilitas.
sumber
Tidak ada. Satu-satunya perbedaan antara jenis adalah ukurannya (dan, karenanya, kisaran nilai yang dapat mereka wakili).
sumber
Catatan yang sangat penting pada 16, 32 dan 64 jenis:
jika Anda menjalankan kueri ini ... Array.IndexOf (Int16 baru [] {1,2,3}, 1)
Anda seharusnya mendapatkan nol (0) karena Anda bertanya ... adalah 1 dalam array 1, 2 atau 3. jika Anda mendapatkan -1 sebagai jawaban, itu berarti 1 tidak dalam array 1, 2 atau 3 .
Lihat apa yang saya temukan: Semua yang berikut ini harus memberi Anda 0 dan bukan -1 (Saya sudah menguji ini di semua versi kerangka 2.0, 3.0, 3.5, 4.0)
C #:
VB.NET:
Jadi poin saya adalah, untuk perbandingan Array.IndexOf, hanya percaya Int32!
sumber
short
agar sesuai dengan mereka dalam array, sedangkan literal 1 kedua dibiarkan seperti biasaint
.(int)1
tidak dianggap sama dengan(short)1
,(short)2
,(short)3
, sehingga hasilnya adalah -1.Array.IndexOf(new Int16(){1,2,3}, 1S)
Array.IndexOf(new Int32(){1,2,3}, 1I)
Array.IndexOf(new Int64(){1,2,3}, 1L)
semua berfungsi seperti yang diharapkan.Object[],Object
kelebihan beban. C # secara implisit menaikkanint
kelong
saat dibutuhkan (dan juga menaikkanshort
keint
ataulong
), tetapi tidak akan secara implisit dilemparkan ke bawah, menggunakanobject
kelebihan beban sebagai gantinya. DenganOption Strict On
atauOff
VB hanya akan menggunakan overload yang diketik ketika disediakan tipe yang seragam, jika tidak menggunakanobject
overload.for Array.IndexOf comparisons, only trust Int32!
salah. Jika Anda melemparkan1
argumen terakhir ke tipe Array yang sesuai, itu berfungsi seperti yang diharapkan.EDIT: Ini tidak sepenuhnya benar untuk C #, sebuah tag yang saya lewatkan ketika saya menjawab pertanyaan ini - jika ada jawaban yang lebih spesifik C #, silakan pilih itu!
Mereka semua mewakili bilangan bulat dari berbagai ukuran.
Namun, ada perbedaan yang sangat kecil.
int16, int32 dan int64 semuanya memiliki ukuran yang tetap .
Ukuran int tergantung pada arsitektur yang Anda kompilasi - spesifikasi C hanya mendefinisikan int sebagai lebih besar atau sama dengan pendek meskipun dalam prakteknya itu adalah lebar prosesor yang Anda targetkan, yang mungkin 32bit tetapi Anda harus tahu bahwa mungkin tidak.
sumber
int
danint32
satu dan sama (integer 32-bit)int16
adalah int pendek (2 byte atau 16-bit)int64
adalah tipe data panjang (8 byte atau 64-bit)sumber
int
adalah alias untukInt32
dan dengan demikian selalu dijamin menjadi 32 bit.Mereka berdua memang identik, Namun saya menemukan perbedaan kecil di antara mereka,
1) Anda tidak dapat menggunakan
Int32
saat membuatenum
2)
Int32
berada di bawah deklarasi Sistem. jika Anda menghapususing.System
Anda akan mendapatkan kesalahan kompilasi tetapi tidak dalam kasus untukint
sumber
Int = Int32 -> Tipe panjang asli
Int16 -> Int asli
Int64 -> tipe data baru tersedia setelah sistem 64 bit
"int" hanya tersedia untuk kompatibilitas ke belakang. Kita harus benar-benar menggunakan tipe int baru untuk membuat program kita lebih tepat.
---------------
Satu hal lagi yang saya perhatikan di sepanjang jalan adalah tidak ada kelas bernama
Int
mirip dengan Int16, Int32 dan Int64. Semua fungsi bermanfaat sepertiTryParse
untuk integer berasalInt32.TryParse
.sumber