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?

Mengomentari pertanyaan (6)
Larutan

Dalam C++:

#include 

kemudian gunakan

int imin = std::numeric_limits::min(); // minimum value
int imax = std::numeric_limits::max();

std::numeric_limits adalah jenis template yang dapat diturunkan dengan jenis lain:

float fmin = std::numeric_limits::min(); // minimum positive value
float fmax = std::numeric_limits::max();

Di C:

#include 

kemudian gunakan

int imin = INT_MIN; // minimum value
int imax = INT_MAX;

atau

#include 

float fmin = FLT_MIN;  // minimum positive value
double dmin = DBL_MIN; // minimum positive value

float fmax = FLT_MAX;
double dmax = DBL_MAX;
Komentar (6)

Aku tahu itu's sebuah pertanyaan lama tapi mungkin seseorang dapat menggunakan solusi ini:

int size = 0; // Fill all bits with zero (0)
size = ~size; // Negate all bits, thus all bits are set to one (1)

Sejauh ini kita telah -1 sebagai hasil 'sampai ukuran adalah signed int.

size = (unsigned int)size >> 1; // Shift the bits of size one position to the right.

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.


cout 
Komentar (1)

#include 
#include 
using namespace std;

int main() {
  cout 
Komentar (8)

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


#define SIGNED_MAX(x) (~(-1 
Komentar (0)

Mengapa tidak menulis sepotong kode seperti:


int  max_neg = ~(1 
Komentar (1)

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:


// We can use it to define limits based on actual compiler built-in types also: 
#define INT_MAX   SIGNED_MAX(int)
// based on the above, we can extend it for unsigned types also:
#define UNSIGNED_MAX(x) (  (SIGNED_MAX(x)
Komentar (0)

Untuk menemukan nilai maksimum int, saya biasanya menulis notasi heksadesimal:

int my_max_int = 0x7fffffff;

bukan tidak teratur nilai desimal:

int my_max_int = 2147483647;
Komentar (0)

Bagaimana (1 << (8*sizeof(int)-2)) - 1 + (1 << (8*sizeof(int)-2)). Ini adalah sama seperti 2^(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.

Komentar (0)

#include 

int main(){
    int32_t maxSigned = -1U >> 1;
    cout 
Komentar (0)