ฉันมีค่าint a
ที่ต้องเท่ากับ "อินฟินิตี้" ซึ่งหมายความว่าถ้า
int b = anyValue;
a>b
เป็นความจริงเสมอ
มีคุณลักษณะของ C ++ ที่สามารถทำให้เป็นไปได้หรือไม่?
Max Value
การนำภาษาไปใช้
a>b
ตรวจสอบจริงๆ:)
ฉันมีค่าint a
ที่ต้องเท่ากับ "อินฟินิตี้" ซึ่งหมายความว่าถ้า
int b = anyValue;
a>b
เป็นความจริงเสมอ
มีคุณลักษณะของ C ++ ที่สามารถทำให้เป็นไปได้หรือไม่?
Max Value
การนำภาษาไปใช้
a>b
ตรวจสอบจริงๆ:)
คำตอบ:
จำนวนเต็มเป็นจำนวน จำกัด โดยเนื้อแท้ ที่อยู่ใกล้คุณจะได้รับคือการตั้งค่าa
ที่จะint
's ค่าสูงสุด:
#include <limits>
// ...
int a = std::numeric_limits<int>::max();
ซึ่งจะเป็น2^31 - 1
(หรือ2 147 483 647
) ถ้าint
กว้าง 32 บิตในการใช้งานของคุณ
หากคุณจริงๆต้องอินฟินิตี้ใช้ลอยชนิดจำนวนจุดเหมือนหรือfloat
double
จากนั้นคุณสามารถรับอินฟินิตี้ด้วย:
double a = std::numeric_limits<double>::infinity();
int
วิธีแก้ปัญหานี้คุณต้องใช้ความระมัดระวังในการคำนวณ: การเพิ่มจำนวนบวกเป็น "อินฟินิตี้" จะให้ผลลัพธ์ที่ไม่คาดคิด
จำนวนเต็มเป็นจำนวน จำกัด น่าเศร้าที่คุณไม่สามารถตั้งค่าเป็นอินฟินิตี้ที่แท้จริงได้ อย่างไรก็ตามคุณสามารถตั้งค่าเป็นค่าสูงสุดของ int ซึ่งหมายความว่ามันจะมากกว่าหรือเท่ากับ int อื่น ๆ เช่น:
a>=b
เป็นความจริงเสมอ
คุณจะทำโดย
#include <limits>
//your code here
int a = std::numeric_limits<int>::max();
//go off and lead a happy and productive life
ปกติจะเท่ากับ 2,147,483,647
หากคุณต้องการค่า "อนันต์" ที่แท้จริงคุณจะต้องใช้ค่า double หรือ float จากนั้นคุณสามารถทำได้
float a = std::numeric_limits<float>::infinity();
สามารถดูคำอธิบายเพิ่มเติมเกี่ยวกับขีด จำกัด ตัวเลขได้ที่นี่
Happy Coding!
หมายเหตุ: ดังที่กล่าวถึง WTP หากจำเป็นอย่างยิ่งที่จะต้องมี int ที่เป็น "infinite" คุณจะต้องเขียนคลาส wrapper สำหรับ int และโอเวอร์โหลดตัวดำเนินการเปรียบเทียบแม้ว่าสิ่งนี้อาจไม่จำเป็นสำหรับโครงการส่วนใหญ่
max()
หรือinfinity()
ในเทมเพลตที่ไม่รู้จักประเภทตัวเลขคุณจะต้องใช้+/-infinity()
iff std::numeric_limits<T>::has_infinity
และอื่น ๆmin()
และmax()
int
มีขอบเขต จำกัด โดยเนื้อแท้ ไม่มีคุณค่าที่ตรงตามความต้องการของคุณ
หากคุณต้องการเปลี่ยนประเภทb
คุณสามารถทำได้ด้วยการแทนที่โอเปอเรเตอร์:
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()
.
นี่คือข้อความสำหรับฉันในอนาคต:
เพียงใช้: (unsigned)!((int)0)
สร้างจำนวนที่มากที่สุดเท่าที่จะเป็นไปได้ในเครื่องใด ๆ โดยกำหนดบิตทั้งหมดเป็น 1s (อัน) จากนั้นส่งไปยังไม่ได้ลงนาม
ดียิ่งขึ้น
#define INF (unsigned)!((int)0)
จากนั้นใช้ INF ในรหัสของคุณ
คุณยังสามารถใช้ INT_MAX:
http://www.cplusplus.com/reference/climits/
เทียบเท่ากับการใช้ numeric_limits
int ค่าต่ำสุดและสูงสุด
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
ฉันเดาว่าคุณสามารถตั้งค่าให้เท่ากับ 9,223,372,036,854,775,807 แต่จะต้องเป็น int64
ถ้าคุณต้องการให้ขูดเสมอทำไมคุณต้องตรวจสอบ? เพียงแค่ตั้งค่าให้เป็นจริงเสมอ
cstdint
)
int
และประเภทที่เกี่ยวข้องใน C ++
float
s ซึ่งมีค่าแทนอินฟินิตี้