Dalam C, integer (untuk mesin 32 bit) adalah 32 bit, dan berkisar antara -32.768 hingga +32.767. Di Jawa, integer (panjang) juga 32 bit, tetapi berkisar dari -2.147.483.648 hingga +2.147.482.447.
Saya tidak mengerti bagaimana jangkauannya berbeda di Jawa, meskipun jumlah bitnya sama. Adakah yang bisa menjelaskan hal ini?
Jawaban:
Dalam C , bahasa itu sendiri tidak menentukan representasi tipe data tertentu. Ini dapat bervariasi dari satu mesin ke mesin lainnya, pada sistem embedded
int
dapat lebar 16 bit, meskipun biasanya 32 bit.Satu-satunya persyaratan adalah bahwa
short int
<=int
<=long int
berdasarkan ukuran. Juga, ada rekomendasi yangint
harus mewakili kapasitas asli prosesor .Semua tipe sudah ditandatangani. The
unsigned
pengubah memungkinkan Anda untuk menggunakan bit tertinggi sebagai bagian dari nilai (jika tidak dicadangkan untuk bit tanda).Berikut adalah tabel pendek dari nilai yang mungkin untuk tipe data yang mungkin:
Di Jawa , yang Java Language Specification menentukan representasi dari tipe data.
Urutannya adalah:
byte
8 bit,short
16 bit,int
32 bit,long
64 bit. Semua jenis ini ditandatangani , tidak ada versi yang tidak ditandatangani. Namun, manipulasi bit memperlakukan angka-angka seperti yang tidak ditandatangani (yaitu, menangani semua bit dengan benar).Tipe data karakter
char
adalah lebar 16 bit, tidak bertanda , dan menampung karakter menggunakan pengkodean UTF-16 (namun, dimungkinkan untuk menetapkanchar
bilangan bulat 16 bit yang tidak ditandatangani yang mewakili kode karakter yang tidak valid)sumber
int
s unsigned ...int foo = Integer.MAX_VALUE + 1; System.out.println(Integer.toUnsignedLong(foo));
cetakan2147483648
dan karakter adalah tipe unsignedInteger.MAX_VALUE + 1
ada0x80000000
di hex, karena overflow (dan sama denganInteger.MIN_VALUE
). Jika Anda mengonversinya menjadi unsigned (long), bit tanda akan diperlakukan seperti bit nilai, jadi itu akan menjadi2147483648
. Terima kasih ataschar
catatannya.char
tidak ditandatangani, Anda benar, tetapi char tidak benar-benar digunakan untuk perhitungan, itu sebabnya saya meninggalkannya dari daftar.Salah. Integer bertanda 32-bit dalam representasi pelengkap 2 memiliki kisaran -2 31 hingga 2 31 -1 yang sama dengan -2.147.483.648 hingga 2.147.483.647.
sumber
**
bahkan tidak C dan tidak terlalu jelas menurut saya. :)^
karena biasanyaxor
Bilangan bulat 32 bit berkisar dari -2.147.483.648 hingga 2.147.483.647. Namun fakta bahwa Anda menggunakan mesin 32-bit tidak berarti
C
kompiler Anda menggunakan bilangan bulat 32-bit.sumber
int
merupakan "lebar alami mesin" yang akan saya artikan sebagai 32 bit saat menyusun untuk mesin 32 bit.Definisi bahasa C menentukan rentang minimum untuk berbagai tipe data. Sebab
int
, kisaran minimum ini adalah -32767 hingga 32767, yang berartiint
harus memiliki lebar minimal 16 bit. Implementasi gratis untuk menyediakanint
tipe yang lebih luas dengan rentang yang lebih luas. Misalnya, pada server pengembangan SLES 10 tempat saya bekerja, kisarannya adalah -2147483647 hingga 2137483647.Masih ada beberapa sistem di luar sana yang menggunakan
int
tipe 16-bit (All The World Bukan AVAXx86), tetapi ada banyak yang menggunakanint
tipe 32-bit , dan mungkin beberapa yang menggunakan 64-bit.Bahasa C dirancang untuk dijalankan pada arsitektur yang berbeda. Java dirancang untuk dijalankan dalam mesin virtual yang menyembunyikan perbedaan arsitektur tersebut.
sumber
INT_MIN
ditentukan sebagai-32767
. Jangan menganggap komplemen dua.Setara ketat dari java
int
adalahlong int
dalam C.Sunting: Jika
int32_t
didefinisikan, maka itu setara dalam hal presisi.long int
menjamin ketepatan javaint
, karena dijamin ukurannya setidaknya 32 bit.sumber
int32_t
jika ditentukan oleh kompiler AndaItu karena dalam C - integer pada mesin 32 bit tidak berarti bahwa 32 bit digunakan untuk menyimpannya, itu mungkin 16 bit juga. Itu tergantung pada mesin (tergantung implementasi).
sumber
int
. Tapilimits.h
Poster itu memiliki jenis java yang tercampur. di java, C-nya adalah pendek: pendek (16 bit) = -32768 hingga 32767 int (32 bit) = -2,147,483,648 hingga 2,147,483,647
http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
sumber
Sebenarnya ukuran dalam bit dari
int
,short
,long
tergantung pada pelaksanaan compiler.Misalnya pada Ubuntu 64 bit saya ada
short
dalam32
bit, ketika pada versi Ubuntu 32bit yang lain itu16
bit.sumber
Ini sebenarnya sangat sederhana untuk dipahami, Anda bahkan dapat menghitungnya dengan kalkulator google: Anda memiliki 32 bit untuk int dan komputer adalah biner, oleh karena itu Anda dapat memiliki 2 nilai per bit (tempat). jika Anda menghitung 2 ^ 32 Anda akan mendapatkan 4.294.967.296. jadi jika Anda membagi angka ini dengan 2, (karena setengah dari mereka adalah bilangan bulat negatif dan setengah lainnya adalah positif), maka Anda mendapatkan 2.147.483.648. dan angka ini adalah int terbesar yang dapat diwakili oleh 32 bit, meskipun jika Anda perhatikan Anda akan melihat bahwa 2.147.483.648 lebih besar dari 2.147.483.647 oleh 1, ini karena salah satu angka mewakili 0 yang tepat di tengah sayangnya 2 ^ 32 bukan bilangan ganjil karena itu Anda tidak hanya memiliki satu angka di tengah, sehingga bilangan bulat yang dimiliki memiliki satu cipher yang lebih sedikit sedangkan yang negatif mendapatkan setengah lengkap 2.147.483.648.
Dan itu saja. Itu tergantung pada mesin bukan pada bahasa.
sumber
int
tidak tergantung pada mesin.int
== Ditandatangani 32-bit, pelengkap dua ditentukan oleh spesifikasi bahasa Java, dan diukir pada lembaran unobtainium anodized . (Oke, mungkin bukan yang terakhir.)Dalam rentang C untuk __int32 adalah –2147483648 hingga 2147483647. Lihat di sini untuk rentang lengkap.
Tidak ada jaminan bahwa 'int' akan menjadi 32 bit, jika Anda ingin menggunakan variabel dengan ukuran tertentu, terutama ketika menulis kode yang melibatkan manipulasi bit, Anda harus menggunakan 'Tipe Integer Standar'.
Di jawa
Tipe data int adalah integer komplemen dua 32-bit yang ditandatangani. Ini memiliki nilai minimum -2147.483.648 dan nilai maksimum 2.147.483.647 (inklusif).
sumber
dalam standar C, Anda dapat menggunakan INT_MAX sebagai nilai 'int' maksimum, konstanta ini harus didefinisikan dalam "limit.h". Konstanta serupa didefinisikan untuk tipe lain ( http://www.acm.uiuc.edu/webmonkeys/book/c_guide/2.5.html ), seperti yang dinyatakan, konstanta ini bergantung pada implementasi tetapi memiliki nilai minimum sesuai dengan bit minimum untuk setiap jenis, sebagaimana ditentukan dalam standar.
sumber