Lebih
nilai maksimum dari int
Apakah ada kode untuk mencari nilai maksimal dari bilangan bulat (sesuai dengan compiler) pada C/C++ seperti Integer.MaxValue
fungsi di jawa?
164
9
Dalam C++:
kemudian gunakan
std::numeric_limits
adalah jenis template yang dapat diturunkan dengan jenis lain:Di C:
kemudian gunakan
atau
Aku tahu itu's sebuah pertanyaan lama tapi mungkin seseorang dapat menggunakan solusi ini:
Sejauh ini kita telah -1 sebagai hasil 'sampai ukuran adalah signed int.
Sebagai Standar mengatakan, bit yang digeser adalah 1 jika variabel ditandatangani dan negatif dan 0 jika variabel yang akan ditandatangani atau tidak ditandatangani dan positif.
Sebagai ukuran ditandatangani dan negatif kita akan bergeser di sign bit yang 1, yang tidak membantu banyak, jadi kita cor ke unsigned int, memaksa untuk pergeseran 0 sebaliknya, pengaturan sign bit 0 sementara membiarkan semua bit lainnya tetap 1.
Berikut ini adalah macro yang saya gunakan untuk mendapatkan nilai maksimum untuk menandatangani bilangan bulat, yang independen dari ukuran ditandatangani tipe integer digunakan, dan untuk yang gcc -Woverflow won't mengeluh
Mengapa tidak menulis sepotong kode seperti:
O. K. I tidak memiliki rep untuk komentar di jawaban sebelumnya (Philippe De Muyter) atau menaikkan itu's skor, oleh karena itu baru contoh menggunakan nya mendefinisikan untuk SIGNED_MAX sepele diperpanjang untuk unsigned jenis:
Untuk menemukan nilai maksimum int, saya biasanya menulis notasi heksadesimal:
bukan tidak teratur nilai desimal:
Bagaimana
(1 << (8*sizeof(int)-2)) - 1 + (1 << (8*sizeof(int)-2))
. Ini adalah sama seperti2^(8*sizeof(int)-2) - 1 + 2^(8*sizeof(int)-2)
.Jika
sizeof(int) = 4 => 2^(8*4-2) - 1 + 2^(8*4-2) = 2^30 - 1 + 20^30 = (2^32)/2 - 1 [max signed int 4 bytes]
.Anda dapat't menggunakan
2*(1 << (8*sizeof(int)-2)) - 1
karena itu akan meluap, tapi(1 << (8*sizeof(int)-2)) - 1 + (1 << (8*sizeof(int)-2))
bekerja.