Di C ++, saya menikmati akses ke 64 bit unsigned integer, via unsigned long long int
, atau via uint64_t
. Sekarang, di Java panjangnya 64 bit, saya tahu. Namun, mereka ditandatangani.
Apakah ada unsigned long (long) yang tersedia sebagai primitif Java? Bagaimana cara saya menggunakannya?
java
unsigned
primitive
unsigned-long-long-int
sebelas81
sumber
sumber
Jawaban:
Saya tidak percaya begitu. Begitu Anda ingin menjadi lebih besar dari long yang ditandatangani, saya pikir BigInteger adalah satu-satunya cara (di luar kotak) untuk pergi.
sumber
Mulai Java 8, ada dukungan untuk unsigned long (unsigned 64 bits). Cara menggunakannya adalah:
Untuk mencetaknya, Anda tidak bisa begitu saja mencetak l1, tetapi Anda harus terlebih dahulu:
Kemudian
sumber
Long ul1 = Long.parseUnsignedLong(objScannerInstance.next("\\d+"));
Tidak benar-benar elegan karena tidak memiliki pemeriksaan rentang, tetapi akan memungkinkan Anda menarik masukan numerik panjang yang jika tidak memungkinkan melebihi rentang panjang yang ditandatangani. (Memanfaatkan fakta yangScanner::next(...)
juga dapat menerima objek Pola atau pola String.)Tidak, tidak ada. Anda harus menggunakan tipe
long
data primitif dan menangani masalah penandatanganan, atau menggunakan kelas sepertiBigInteger
.sumber
Tidak, tidak ada. Para desainer Java dalam catatan mengatakan mereka tidak menyukai unsigned int. Gunakan BigInteger sebagai gantinya. Lihat pertanyaan ini untuk detailnya.
sumber
Java 8 menyediakan satu set operasi panjang tak bertanda yang memungkinkan Anda untuk secara langsung memperlakukan variabel Panjang tersebut sebagai tak bertanda Long, berikut adalah beberapa yang umum digunakan:
Dan penambahan, pengurangan, dan perkalian adalah sama untuk long bertanda dan tidak bertanda tangan.
sumber
Bergantung pada operasi yang ingin Anda lakukan, hasilnya hampir sama, ditandatangani atau tidak. Namun, kecuali Anda menggunakan operasi sepele, Anda akan berakhir menggunakan BigInteger.
sumber
Untuk unsigned long Anda dapat menggunakan kelas UnsignedLong dari pustaka Guava :
Ini mendukung berbagai operasi:
Hal yang tampaknya hilang saat ini adalah operator pergeseran byte. Jika Anda membutuhkannya, Anda dapat menggunakan BigInteger dari Java.
sumber
Java tidak memiliki tipe unsigned. Seperti yang telah disebutkan, lakukan overhead BigInteger atau gunakan JNI untuk mengakses kode native.
sumber
Paket org.apache.axis.types memiliki file
Kelas unsignedLong.
untuk maven:
sumber
Sepertinya di Java 8 beberapa metode ditambahkan ke Long untuk memperlakukan barang lama [ditandatangani] asalkan tidak ditandatangani. Tampaknya seperti solusi, tetapi terkadang dapat membantu.
sumber