Saya memiliki int akebutuhan yang harus sama dengan "tak terbatas". Artinya jika
int b = anyValue;
a>b selalu benar.
Apakah ada fitur C ++ yang memungkinkan hal ini?
Max Valueimplementasi bahasanya.
a>bpemeriksaan :)
Saya memiliki int akebutuhan yang harus sama dengan "tak terbatas". Artinya jika
int b = anyValue;
a>b selalu benar.
Apakah ada fitur C ++ yang memungkinkan hal ini?
Max Valueimplementasi bahasanya.
a>bpemeriksaan :)
Jawaban:
Integer secara inheren terbatas. Yang paling dekat yang bisa Anda dapatkan adalah dengan menyetel ake intnilai maksimum:
#include <limits>
// ...
int a = std::numeric_limits<int>::max();
Yang akan menjadi 2^31 - 1(atau 2 147 483 647) jika int32 bit lebar pada implementasi Anda.
Jika Anda benar - benar membutuhkan angka tak terbatas, gunakan jenis angka titik mengambang, seperti floatatau double. Anda kemudian bisa mendapatkan infinity dengan:
double a = std::numeric_limits<double>::infinity();
intsolusi, 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_infinitydan sebaliknya min()danmax()
intsecara 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).
intdan jenis terkait dalam C ++.
floats, yang memiliki nilai yang mewakili tak terhingga.