Integer.MaxValue
জাভাতে ফাংশনের মতো সি / সি ++ তে পূর্ণসংখ্যার সর্বোচ্চ মান (সংকলক অনুসারে) সন্ধানের জন্য কি কোনও কোড রয়েছে ?
int
সঙ্গে long long int
Gregories উত্তরে ...
-pedantic
) এটি সমর্থন করে।
Integer.MaxValue
জাভাতে ফাংশনের মতো সি / সি ++ তে পূর্ণসংখ্যার সর্বোচ্চ মান (সংকলক অনুসারে) সন্ধানের জন্য কি কোনও কোড রয়েছে ?
int
সঙ্গে long long int
Gregories উত্তরে ...
-pedantic
) এটি সমর্থন করে।
উত্তর:
সি ++ এ:
#include <limits>
তারপরে ব্যবহার করুন
int imin = std::numeric_limits<int>::min(); // minimum value
int imax = std::numeric_limits<int>::max();
std::numeric_limits
এটি একটি টেম্পলেট প্রকার যা অন্য ধরণের সাথে ইনস্ট্যান্ট করা যায়:
float fmin = std::numeric_limits<float>::min(); // minimum positive value
float fmax = std::numeric_limits<float>::max();
সি তে:
#include <limits.h>
তারপরে ব্যবহার করুন
int imin = INT_MIN; // minimum value
int imax = INT_MAX;
অথবা
#include <float.h>
float fmin = FLT_MIN; // minimum positive value
double dmin = DBL_MIN; // minimum positive value
float fmax = FLT_MAX;
double dmax = DBL_MAX;
min
সর্বনিম্ন ধনাত্মক মান, যেখানে পূর্ণসংখ্যা হিসাবে min
সর্বনিম্ন মান হয়। সি ম্যাক্রো / ধ্রুবকগুলির জন্য একই।
uint64_t
এবং int64_t
নয় int
।
#include <limits>
এবং int imax = std::numeric_limits<int>::max();
, তবে আমি ত্রুটি পেয়েছি Can't resolve struct member 'max'
। এটি কেন ঘটে এবং এটিকে কীভাবে ঠিক করা যায় সে সম্পর্কে কোনও ধারণা? আমি উবুন্টু 14.04 এ সিএমকে এবং সি ++ 11 সহ ক্লিওন আইডিই ব্যবহার করছি। আমি মনে করি এটি এই ইস্যুতে
আমি জানি এটি একটি পুরানো প্রশ্ন তবে সম্ভবত কেউ এই সমাধানটি ব্যবহার করতে পারেন:
int size = 0; // Fill all bits with zero (0)
size = ~size; // Negate all bits, thus all bits are set to one (1)
এখন পর্যন্ত আমাদের কাছে ফলাফল হিসাবে 1 রয়েছে ' আকারটি একটি স্বাক্ষরিত ইনট হয়।
size = (unsigned int)size >> 1; // Shift the bits of size one position to the right.
যেমন স্ট্যান্ডার্ড বলেছেন, বিটগুলি স্থানান্তরিত হয় যদি ভেরিয়েবল স্বাক্ষরিত হয় এবং negativeণাত্মক হয় এবং 0 হলে ভেরিয়েবল স্বাক্ষরযুক্ত বা স্বাক্ষরিত হয় এবং ইতিবাচক হয়।
হিসাবে আকার সাইন করা হয়েছে এবং ঋণাত্মক আমরা 0 সাইন বিট যা 1, যা অনেক সাহায্য করা হয় না হয় নামান হবে, তাই আমরা স্বাক্ষরবিহীন int- এ নিক্ষেপ, পরিবর্তে 0 নামান করতে বাধ্য, সাইন বিট সেট লেট যখন সব অন্যান্য বিট 1 থাকা।
cout << size << endl; // Prints out size which is now set to maximum positive value.
আমরা একটি মাস্ক এবং জোরও ব্যবহার করতে পারি তবে তারপরে আমাদের ভেরিয়েবলের সঠিক বিটসাইজটি জানতে হবে। বিটস সামনের দিকে স্থানান্তরিত করার সাথে, আমাদের মেশিন বা সংকলকটিতে কতগুলি বিট রয়েছে বা আমাদের অতিরিক্ত লাইব্রেরি অন্তর্ভুক্ত করার দরকার নেই তা জানতে হবে না।
cout << "INT_MAX:\t" << (int) ((~((unsigned int) 0)) >> 1) << '\n' << "UINT_MAX:\t" << ~((unsigned int) 0) << endl;
#include <climits>
#include <iostream>
using namespace std;
int main() {
cout << INT_MAX << endl;
}
numeric_limits<int>::max()
- টেমপ্লেট প্রসঙ্গেও কাজ করে, তবে (আমার কাছে কিছু অকাট্য কারণে) একটি সংকলন-সময় ধ্রুবক হিসাবে ব্যবহার করা যায় না। INT_MAX
- এটি একটি ম্যাক্রো, টেম্পলেট ফাংশনগুলির মধ্যে বেশ অযোগ্য, তবে একটি সংকলন-সময় ধ্রুবক হিসাবে ব্যবহার করা যেতে পারে।
স্বাক্ষরিত পূর্ণসংখ্যার সর্বাধিক মান পেতে আমি যে ম্যাক্রোটি ব্যবহার করি তা এখানে ব্যবহৃত স্বাক্ষরিত পূর্ণসংখ্যার আকারের চেয়ে পৃথক এবং যার জন্য জিসিসি -ওয়েজফ্লো অভিযোগ করবে না
#define SIGNED_MAX(x) (~(-1 << (sizeof(x) * 8 - 1)))
int a = SIGNED_MAX(a);
long b = SIGNED_MAX(b);
char c = SIGNED_MAX(c); /* if char is signed for this target */
short d = SIGNED_MAX(d);
long long e = SIGNED_MAX(e);
ঠিক আছে আমি তন্ন তন্ন (ফিলিপ ডি Muyter এর) পূর্ববর্তী উত্তরে মন্তব্যের প্রতিনিধির আছে কিংবা তার ব্যবহার করে এটি এর স্কোর, অত একটি নতুন দৃষ্টান্ত বাড়াতে সংজ্ঞায়িত SIGNED_MAX জাভাস্ক্রিপ্টে গার্বেজ স্বাক্ষরবিহীন ধরনের জন্য বাড়ানো জন্য:
// 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)<<1) | 1 ) // We reuse SIGNED_MAX
#define UINT_MAX UNSIGNED_MAX(unsigned int) // on ARM: 4294967295
// then we can have:
unsigned int width = UINT_MAX;
এটি বা সেই শিরোলেখ ব্যবহারের বিপরীতে, আমরা এখানে কম্পাইলার থেকে প্রকৃত প্রকারটি ব্যবহার করি।
কি সম্পর্কে (1 << (8*sizeof(int)-2)) - 1 + (1 << (8*sizeof(int)-2))
। এই হিসাবে একই 2^(8*sizeof(int)-2) - 1 + 2^(8*sizeof(int)-2)
।
যদি sizeof(int) = 4 => 2^(8*4-2) - 1 + 2^(8*4-2) = 2^30 - 1 + 20^30 = (2^32)/2 - 1 [max signed int of 4 bytes]
।
আপনি ব্যবহার করতে পারবেন না 2*(1 << (8*sizeof(int)-2)) - 1
কারণ এটি উপচে পড়বে, তবে (1 << (8*sizeof(int)-2)) - 1 + (1 << (8*sizeof(int)-2))
কাজ করে।