Saya memiliki int a
kebutuhan yang harus sama dengan "tak terbatas". Artinya jika
int b = anyValue;
a>b
selalu benar.
Apakah ada fitur C ++ yang memungkinkan hal ini?
Max Value
implementasi bahasanya.
a>b
pemeriksaan :)
Saya memiliki int a
kebutuhan yang harus sama dengan "tak terbatas". Artinya jika
int b = anyValue;
a>b
selalu benar.
Apakah ada fitur C ++ yang memungkinkan hal ini?
Max Value
implementasi bahasanya.
a>b
pemeriksaan :)
Jawaban:
Integer secara inheren terbatas. Yang paling dekat yang bisa Anda dapatkan adalah dengan menyetel a
ke int
nilai maksimum:
#include <limits>
// ...
int a = std::numeric_limits<int>::max();
Yang akan menjadi 2^31 - 1
(atau 2 147 483 647
) jika int
32 bit lebar pada implementasi Anda.
Jika Anda benar - benar membutuhkan angka tak terbatas, gunakan jenis angka titik mengambang, seperti float
atau double
. Anda kemudian bisa mendapatkan infinity dengan:
double a = std::numeric_limits<double>::infinity();
int
solusi, Anda harus sangat berhati-hati dengan aritmatika: menambahkan angka positif ke "tak terhingga" akan menghasilkan hasil yang sangat tidak terduga.
Bilangan bulat itu terbatas, jadi sayangnya Anda tidak bisa menyetelnya menjadi tak terhingga. Bagaimanapun Anda dapat mengaturnya ke nilai maksimal dari sebuah int, ini berarti nilainya akan lebih besar atau sama dengan int lainnya, yaitu:
a>=b
selalu benar.
Anda akan melakukan ini dengan
#include <limits>
//your code here
int a = std::numeric_limits<int>::max();
//go off and lead a happy and productive life
Ini biasanya akan sama dengan 2.147.483.647
Jika Anda benar-benar membutuhkan nilai "tak terbatas" yang sebenarnya, Anda harus menggunakan double atau float. Kemudian Anda dapat melakukannya
float a = std::numeric_limits<float>::infinity();
Penjelasan tambahan tentang batas numerik dapat ditemukan di sini
Selamat Coding!
Catatan: Seperti yang disebutkan WTP, jika benar-benar diperlukan untuk memiliki int yang "tak terbatas" Anda harus menulis kelas pembungkus untuk int dan membebani operator pembanding, meskipun ini mungkin tidak diperlukan untuk sebagian besar proyek.
max()
atau infinity()
dalam template di mana tipe numeriknya tidak diketahui, Anda harus menggunakan +/-infinity()
iff std::numeric_limits<T>::has_infinity
dan sebaliknya min()
danmax()
int
secara inheren terbatas; tidak ada nilai yang memenuhi kebutuhan Anda.
Jika Anda ingin mengubah jenis b
, Anda dapat melakukan ini dengan penggantian operator:
class infinitytype {};
template<typename T>
bool operator>(const T &, const infinitytype &) {
return false;
}
template<typename T>
bool operator<(const T &, const infinitytype &) {
return true;
}
bool operator<(const infinitytype &, const infinitytype &) {
return false;
}
bool operator>(const infinitytype &, const infinitytype &) {
return false;
}
// add operator==, operator!=, operator>=, operator<=...
int main() {
std::cout << ( INT_MAX < infinitytype() ); // true
}
std::numeric_limits<float>::infinity()
.
Ini adalah pesan untuk saya di masa depan:
Gunakan saja: (unsigned)!((int)0)
Ini menciptakan kemungkinan nomor terbesar di mesin apa pun dengan menetapkan semua bit ke 1s (satu) dan kemudian melemparkannya ke unsigned
Bahkan lebih baik
#define INF (unsigned)!((int)0)
Dan kemudian gunakan saja INF di kode Anda
#define INF ((unsigned) ~0)
, lihat di sini .
Anda juga dapat menggunakan INT_MAX:
http://www.cplusplus.com/reference/climits/
itu setara dengan menggunakan numeric_limits.
int min dan nilai maks
Int -2,147,483,648 / 2,147,483,647 Int 64 -9,223,372,036,854,775,808 / 9,223,372,036,854,775,807
saya kira Anda bisa mengatur menjadi sama dengan 9.223.372.036.854.775.807 tetapi itu harus menjadi int64
Jika Anda selalu ingin menjadi parutan itu mengapa Anda perlu memeriksanya? setel agar selalu benar
cstdint
).
int
dan jenis terkait dalam C ++.
float
s, yang memiliki nilai yang mewakili tak terhingga.