পূর্ণসংখ্যার সর্বাধিক মান


290

সি-তে, পূর্ণসংখ্যা (32 বিট মেশিনের জন্য) 32 বিট হয় এবং এটি -32,768 থেকে +32,767 অবধি রয়েছে। জাভাতে, পূর্ণসংখ্যা (দীর্ঘ) এছাড়াও 32 বিট, তবে -2,147,483,648 থেকে +2,147,483,647 পর্যন্ত।

বিটের সংখ্যা সমান হলেও জাভাতে পরিসরটি কীভাবে আলাদা তা আমি বুঝতে পারি না। কেউ এই ব্যাখ্যা করতে পারেন?


35
জাভা, ব্যবহার Integer.MAX_VALUE এবং Integer.MIN_VALUE মধ্যে int- এর সর্বোচ্চ এবং কমপক্ষে মান পেতে
লাইভ-প্রেম

5
@stackuser - আপনার প্রশ্নের কিছু ভাল উত্তর - আপনাকে একটিই :) গ্রহণ করা উচিত
Darragh Enright

2
@ দারাঘইনরাইট তাকে সর্বশেষে ২০১৫ সালের মার্চ মাসে দেখা গিয়েছিল, আমার সন্দেহ হয় তিনি ফিরে আসছেন :(
আনজিহিউর

4
@ অ্যাড্রিয়ান হাহা - আমার মনে হয় না! আমার মনে হয় কিছুটা ঘটে আমি সবসময় কল্পনা করেছিলাম যে এসও সহজেই নির্দিষ্ট শর্তগুলির মধ্যে উত্তরগুলি স্বয়ংক্রিয়ভাবে গ্রহণ করতে পারে - যেখানে প্রশ্নটি একটি নির্দিষ্ট বয়সের বেশি, ওপি হল আউওএল এবং একটি উচ্চ সংখ্যক উর্ধ্বতন সহ একটি স্পষ্টভাবে কার্যকর উত্তর রয়েছে।
দারাগ এনরাট

2
পছন্দ করুন তবে ২ সপ্তাহ আগে ওপি এখানে ছিলেন, তার গ্রহণ করার সুযোগ ছিল, তাই প্রযুক্তিগতভাবে তিনি দূরে নন।
gaborsch

উত্তর:


392

ইন সি , নিজেই ভাষা নির্দিষ্ট datatypes প্রতিনিধিত্ব নির্ধারণ করে না। এটি মেশিন থেকে মেশিনে পরিবর্তিত হতে পারে, এম্বেড থাকা সিস্টেমে int16 বিট প্রস্থ হতে পারে, যদিও এটি সাধারণত 32 বিট হয়।

একমাত্র প্রয়োজন হ'ল আকারের দ্বারা short int<= int<= long int। এছাড়াও, এমন একটি প্রস্তাব রয়েছে যা intপ্রসেসরের আদি ক্ষমতার প্রতিনিধিত্ব করবে

সব ধরণের স্বাক্ষরিত হয়। unsignedপরিবর্তক আপনি মান (অন্যথায় এটি চিহ্ন বিট জন্য সংরক্ষিত) অংশ হিসেবে সর্বোচ্চ বিট ব্যবহার করতে পারবেন।

এখানে সম্ভাব্য ডেটাগুলির জন্য সম্ভাব্য মানগুলির একটি সংক্ষিপ্ত সারণী রয়েছে:

          width                     minimum                         maximum
signed    8 bit                        -128                            +127
signed   16 bit                     -32 768                         +32 767
signed   32 bit              -2 147 483 648                  +2 147 483 647
signed   64 bit  -9 223 372 036 854 775 808      +9 223 372 036 854 775 807
unsigned  8 bit                           0                            +255
unsigned 16 bit                           0                         +65 535
unsigned 32 bit                           0                  +4 294 967 295
unsigned 64 bit                           0     +18 446 744 073 709 551 615

ইন জাভা , জাভা ল্যাঙ্গুয়েজ স্পেসিফিকেশন ধরনের তথ্য প্রতিনিধিত্ব নির্ধারণ করে।

অর্ডারটি হ'ল: byte8 বিট, short16 বিট, int32 বিট, long64 বিট। এই সমস্ত ধরণের স্বাক্ষরিত , কোনও স্বাক্ষরবিহীন সংস্করণ নেই। যাইহোক, বিট ম্যানিপুলেশনগুলি সংখ্যাগুলি স্বাক্ষরবিহীন হওয়ার সাথে আচরণ করে (এটি হ'ল সমস্ত বিট সঠিকভাবে পরিচালনা করছে)।

অক্ষরের ডেটা টাইপটি char16 বিট প্রশস্ত, স্বাক্ষরবিহীন এবং ইউটিএফ -16 এনকোডিং ব্যবহার করে অক্ষর ধারণ করে (তবে এটি charএকটি স্বতন্ত্র স্বাক্ষরযুক্ত 16 বিট পূর্ণসংখ্যার যা একটি অবৈধ অক্ষরের কোডপয়েন্টকে উপস্থাপন করে তা নির্ধারণ করা সম্ভব )

          width                     minimum                         maximum

SIGNED
byte:     8 bit                        -128                            +127
short:   16 bit                     -32 768                         +32 767
int:     32 bit              -2 147 483 648                  +2 147 483 647
long:    64 bit  -9 223 372 036 854 775 808      +9 223 372 036 854 775 807

UNSIGNED
char     16 bit                           0                         +65 535

10
সি স্ট্যান্ডার্ড INT_MAX, লং_ম্যাক্স ইত্যাদির জন্য ন্যূনতম মানগুলিও নির্দিষ্ট করে
অলিভার চার্লসওয়ার্থ

13
জাভা 8 এখন স্বাক্ষরবিহীন পূর্ণসংখ্যাও রয়েছে: ডকস.ওরাকল.com
জাকুব

4
ধন্যবাদ, @ জেকবোট, এটি জেনে ভাল। যদিও মনে হচ্ছে প্রতিনিধিত্ব এখনও স্বাক্ষরিত, তবে নির্দিষ্ট স্বাক্ষরযুক্ত অপারেশনগুলি একটি ফাংশন হিসাবে প্রয়োগ করা হয়। দু'জন স্বাক্ষরযুক্ত যোগ করা শক্ত int...
গ্যাবোর্স

5
@GaborSch ইন জাভা, int foo = Integer.MAX_VALUE + 1; System.out.println(Integer.toUnsignedLong(foo));কপি করে প্রিন্ট 2147483648এবং গৃহস্থালির কাজ একটি স্বাক্ষরবিহীন ধরনের
howlger

2
ওভারফ্লো (এবং সমান ) এর ফলে @ হোলজার হেক্সে Integer.MAX_VALUE + 1রয়েছে 0x80000000in Integer.MIN_VALUEযদি আপনি এটিকে স্বাক্ষরবিহীন (দীর্ঘ) এ রূপান্তর করেন তবে সাইন বিটটি মান বিটের মতো বিবেচিত হবে, তাই হবে 2147483648charনোটের জন্য আপনাকে ধন্যবাদ । charস্বাক্ষরবিহীন, আপনি ঠিক, তবে চরটি গণনার জন্য সত্যই ব্যবহৃত হয় না, এ কারণেই আমি এটিকে তালিকা থেকে ছেড়ে দিয়েছি।
গ্যাবর্স

72

সি-তে, পূর্ণসংখ্যা (32 বিট মেশিনের জন্য) 32 বিট এবং এটি -32768 থেকে +32767 অবধি রয়েছে।

ভুল। 2 এর পরিপূরক উপস্থাপনায় 32-বিট স্বাক্ষরিত পূর্ণসংখ্যার পরিধি -2 31 থেকে 2 31 -1 রয়েছে যা -2,147,483,648 থেকে 2,147,483,647 এর সমান।


3
আমি আপনার ক্ষয়ক্ষতি স্থির করেছি, **এমনকি সিও নয় এবং আমার মতে খুব পরিষ্কার নয়। :)
বিনোদন

2
এখন আরও ভাল লাগছে, ধন্যবাদ! অনেক বেশি পাইথন, আমার ধারণা। আমি ^সাধারণত এড়িয়ে xor
কোস

5
আমি মনে করি আমার বক্তব্যটি যেহেতু সি এর ক্ষতিকারক অপারেটর নেই, আমি মনে করি না যে নির্দিষ্ট অংশটি কোড হিসাবে বিন্যাস করা উচিত নয়। :)
বিনোদন

19

একটি 32 বিট পূর্ণসংখ্যার -2,147,483,648 থেকে 2,147,483,647 অবধি। তবে আপনি যে 32-বিট মেশিনে রয়েছেন তার অর্থ এই নয় যে আপনার Cসংকলক 32-বিট পূর্ণসংখ্যা ব্যবহার করে।


1
কমপক্ষে মিঃ কর্নিগান এবং মিঃ রিচিজের "দ্য সি প্রোগ্রামিং ল্যাঙ্গুয়েজ" এর আমার অনুলিপিটি A4.2 এ বলেছেন যে intএটি "মেশিনের প্রাকৃতিক প্রস্থ" যা 32 বিট মেশিনের জন্য কম্পাইল করার সময় আমি 32 বিট হিসাবে ব্যাখ্যা করব।
জুনিক্স

7
এটি আমার বিশ্বাস করা মেশিন নয়, সংকলকটির উপর নির্ভর করে। উদাহরণস্বরূপ আমার 64 বিট মেশিনে একটি 16 বিট সংকলক ইনস্টল করা আছে।
Ivaylo স্ট্রান্ডজেভ

অবশ্যই আপনার 16 বিট x86 কোডের জন্য 16 বিট সংকলকটি কেবলমাত্র 16 বিট ব্যবহার করেছিল। তবে সেটা আমার বক্তব্য ছিল না। এমনকি 16 বিট মোডে চলমান একটি 32 বিট x86 প্রসেসরের কেবল নেটিভ ক্ষমতা কেবল 16 বিট। আমার বক্তব্যটি হ'ল লক্ষ্য প্ল্যাটফর্মটির সংকলকটিতে বিষয় রয়েছে। উদাহরণস্বরূপ, আপনার যদি আপনার 80286 এর জন্য একটি সংকলক থাকে তবে আপনি এখনও 16-বিট কোড তৈরি করতে পারেন এবং তাই 16 বিট পূর্ণসংখ্যা রয়েছে।
জুনিক্স

2
@ জুনিক্স আমি বিশ্বাস করি যে আমার উত্তরটিতে আমি ঠিক এটিই উল্লেখ করেছি। এটি ওএস নয় যা আপনার পূর্ণসংখ্যার কত বিট রয়েছে তা নির্দিষ্ট করে। টার্গেট প্ল্যাটফর্ম হ'ল সংকলকটির একটি সম্পত্তি, এটি ওএসে কাজ করে না বা আপনার যে প্রসেসরটি ব্যবহার করে তা নয়।
আইভায়লো স্ট্রান্ডজেভ

যেমনটি আমি আমার প্রথম মন্তব্যে লিখেছি। "32 বিট মেশিনের জন্য সংকলন করার সময় এটি 32-বিট"। ওপি তার পোস্টে লিখেছেন "পূর্ণসংখ্যা (32 বিট মেশিনের জন্য)" সুতরাং আমি যা বুঝতে পেরেছি সে তার ওএস বা তার মেশিনের কথা উল্লেখ করছে না, সে তার লক্ষ্য প্ল্যাটফর্মের কথা উল্লেখ করছে
জুন

15

সি ভাষার সংজ্ঞা বিভিন্ন ডেটা ধরণের জন্য সর্বনিম্ন ব্যাপ্তি নির্দিষ্ট করে । জন্য int, এই ন্যূনতম পরিসীমা 32767 করার -32767, মানে একটি intহওয়া আবশ্যক অন্তত 16 বিট প্রশস্ত। একটি বাস্তবায়নের intসাথে সংশ্লিষ্ট বৃহত্তর পরিসরের বিস্তৃত প্রকারের জন্য বিনামূল্যে free উদাহরণস্বরূপ, SLES 10 বিকাশ সার্ভারে আমি কাজ করি, এর পরিসীমা -2147483647 থেকে 2137483647।

এখনও সেখানে আউট কিছু সিস্টেম ব্যবহারের 16 বিট intধরনের (সকল দ্য দুনিয়া না একটি VAX এক্স 86), কিন্তু প্রচুর ব্যবহারের 32-বিট আছে intধরনের, এবং হয়ত কয়েক ব্যবহারের 64-বিট।

সি ভাষাটি বিভিন্ন আর্কিটেকচারে চলার জন্য ডিজাইন করা হয়েছিল। জাভা একটি ভার্চুয়াল মেশিনে চালনার জন্য ডিজাইন করা হয়েছিল যা সেই স্থাপত্যগুলির পার্থক্যগুলি গোপন করে।


16-বিট ইন্টের জন্য এটি -3276 8 থেকে 32767 32 32-বিট ইন্টের জন্য এটি -214748364 8 থেকে 2147483647 Ran ) - 1.
পৌরাণিক

3
@ মাভেন: 5.2.4.2.1 - INT_MINহিসাবে নির্দিষ্ট করা হয়েছে -32767। দু'জনের পরিপূরক ধরে নিবেন না।
জন বোদে

8

জাভার কঠোর সমতুল্য intহয় long intসি

সম্পাদনা: যদি int32_tসংজ্ঞায়িত করা হয় তবে তা যথার্থতার ক্ষেত্রে সমান। long intজাভা যথাযথতা গ্যারান্টি int, কারণ এটি আকারে কমপক্ষে 32 বিট হওয়ার গ্যারান্টি।


আপনি ঠিক বলেছেন, সমতুল্য int32_tযদি এটি আপনার সংকলক দ্বারা নির্ধারিত হয়
UmNyobe

7

কারণ সি তে - 32 বিট মেশিনে পূর্ণসংখ্যার অর্থ এই নয় যে 32 বিটগুলি এটি সঞ্চয় করার জন্য ব্যবহৃত হয়, এটি 16 বিটও হতে পারে। এটি মেশিনের উপর নির্ভর করে (প্রয়োগ-নির্ভর)


1
ভাল, এটি লক্ষণীয় যে আদর্শ বাস্তবায়ন আচরণটি "মেশিন প্রস্থ" এর জন্য ব্যবহার করছে int। তবে limits.hসঠিক সত্যটি খুঁজে বের করতে সহায়তা করে
জুনিক্স

3
তবে বাস্তবে, আমি মনে করি না 32 এর জন্য কোনও সি কম্পাইলার 32 বিট হিসাবে বিনা বিনা তৈরি করা হয়েছে। স্ট্যান্ডার্ডটি সংকলক বাস্তবায়নটিকে মরোনিক প্রকৃতির হতে পারে তবে কিছু কারণে কেউ মরোনিক সি সংকলক বানাতে চায় না। প্রবণতাটি দরকারী সি সংকলকগুলি তৈরির।
লন্ডিন


4

আসলে এর বিট মাপ int, short, long কম্পাইলার বাস্তবায়ন উপর নির্ভর করে।

যেমন আমার উবুন্টু 64 বিট আমি shortমধ্যে 32, বিট অন্য এক 32bit উবুন্টু সংস্করণ এটা যখন 16বিট।


2

এটি উপলব্ধি করা আসলেই সহজ, আপনি এটি গুগল ক্যালকুলেটরের সাথেও গণনা করতে পারেন: আপনার কাছে কোন ইন্টের জন্য 32 বিট এবং কম্পিউটারগুলি বাইনারি হয়, সুতরাং আপনার বিট প্রতি 2 মান (স্পট) থাকতে পারে। আপনি যদি 2 ^ 32 গণনা করেন তবে আপনি 4,294,967,296 পাবেন। সুতরাং আপনি যদি এই সংখ্যাটি 2 দিয়ে ভাগ করেন, (কারণ তাদের অর্ধেকটি নেতিবাচক পূর্ণসংখ্যার এবং অন্য অর্ধেকটি ইতিবাচক), তবে আপনি 2,147,483,648 পাবেন। এবং এই সংখ্যাটি 32 টি বিট দ্বারা প্রতিনিধিত্ব করা যেতে পারে এমন বৃহত্তম ইনট, যদিও আপনি মনোযোগ দিন তবে খেয়াল করবেন যে 2,147,483,648 1 দ্বারা 2,147,483,647 এর চেয়ে বেশি, এটি কারণ সংখ্যার মধ্যে একটি 0 প্রতিনিধিত্ব করে যা দুর্ভাগ্যক্রমে 2 is 32 একটি বিজোড় সংখ্যা নয় তাই মাঝখানে আপনার কেবল একটি সংখ্যা নেই, সুতরাং সম্ভাব্য সংখ্যার একটি কম সাইফার থাকে যখন theণাত্মকগুলি সম্পূর্ণ অর্ধেক 2,147,483,648 পান।

এবং এটাই. এটি মেশিনের উপর নির্ভর করে ভাষার উপর নয়।


2
এটি তিনি যা চেয়েছিলেন তা নয় ... প্রশ্নটি হল "কেন সি ইন্টি জাভা ইন্টের চেয়ে আলাদা?"
ইলেক্ট্রনওয়িল

এবং জাভাতে, আকারটি মেশিনের উপর নির্ভর int করে নাint== 32-বিট স্বাক্ষরিত, দু'টির পরিপূরক জাভা ভাষার স্পেসিফিকেশন দ্বারা সংজ্ঞায়িত করা হয়েছে, এবং অ্যানোডাইজড আনবোটেনিয়ামের শীটে খোদাই করা হয়েছে । (ঠিক আছে, সম্ভবত শেষ বিট না।)
স্টিফেন সি

1

__Int32 এর সি সীমার মধ্যে 2147483648 থেকে 2147483647 full সম্পূর্ণ পরিসীমা জন্য এখানে দেখুন।

unsigned short 0 to 65535
signed short 32768 to 32767
unsigned long 0 to 4294967295
signed long 2147483648 to 2147483647

কোনও 'ইনট' 32 বিট হবে এমন কোনও গ্যারান্টি নেই, আপনি যদি নির্দিষ্ট আকারের ভেরিয়েবল ব্যবহার করতে চান, বিশেষত বিট ম্যানিপুলেশনগুলির সাথে জড়িত কোড লেখার সময়, আপনার 'স্ট্যান্ডার্ড পূর্ণসংখ্যার প্রকারগুলি' ব্যবহার করা উচিত।

জাভাতে

ইনট ডাটা টাইপ হ'ল 32-বিট স্বাক্ষরিত দুটির পরিপূরক পূর্ণসংখ্যা। এটির সর্বনিম্ন মান -2,147,483,648 এবং সর্বোচ্চ মূল্য 2,147,483,647 (অন্তর্ভুক্ত) রয়েছে।


2
আপনি সি এর জন্য যে মানগুলি উদ্ধৃত করেছেন সেগুলি কেবল সর্বনিম্ন ব্যাপ্তি।
অলিভার চার্লসওয়ার্থ

সর্বনিম্ন থেকে সর্বোচ্চ পর্যন্ত @ ওলিচার্সওয়ার্থ রেঞ্জ Ran
অচিন্ত্য ঝা

6
আমার অর্থ হ'ল, প্রতিটি ধরণের রেঞ্জটি আপনি উপরে উল্লিখিত চেয়ে বড় হতে পারবেন be
অলিভার চার্লসওয়ার্থ

3
সি-তে __int32 বলে কিছু নেই। মাইক্রোসফ্টের কোনও কঠোরভাবে সি সংকলক নেই, সুতরাং তাদের নন-সি সংকলক কীভাবে কাজ করে সে সম্পর্কে কে পাত্তা দেয়? একমাত্র প্রাসঙ্গিক উত্স হ'ল ISO9899, ​​হয় 5.2.4.2.1 "" পূর্ণসংখ্যার ধরণের আকার "বা 7.20.2.1" সঠিক প্রস্থের পূর্ণসংখ্যার সীমাবদ্ধতা "। এর কোনটিই মাইক্রোসফ্ট গু এর সাথে সামঞ্জস্যপূর্ণ নয়।
লন্ডিন

2
C99 স্ট্যান্ডার্ডটিতে int32_t, int16_t ইত্যাদি যোগ করে। মাইক্রোসফ্ট সংযোজনগুলির সাথে 100% সামঞ্জস্যপূর্ণ নয়, তবে তারা একইভাবে কাজ করে।
মনিকা সম্পর্কে

-1

স্ট্যান্ডার্ড সি-তে আপনি INT_MAX সর্বাধিক 'ইনট' মান হিসাবে ব্যবহার করতে পারেন, এই ধ্রুবকটি অবশ্যই "সীমাবদ্ধতা" -এ সংজ্ঞায়িত করা উচিত। অনুরূপ ধ্রুবকগুলি অন্য ধরণের ( http://www.acm.uiuc.edu/webmonkeys/book/c_guide/2.5.html ) জন্য সংজ্ঞায়িত করা হয়েছে , যেমন বলা হয়েছে, এই ধ্রুবকগুলি বাস্তবায়ন নির্ভর হয় তবে সর্বনিম্ন বিট অনুসারে ন্যূনতম মান থাকে প্রতিটি ধরণের জন্য, মান হিসাবে নির্দিষ্ট।


5
এটি ওপি-র প্রশ্নের সমাধানের পক্ষে আসলেই আসে না। এছাড়াও, একটি উত্তরের মূল অংশগুলি অন্য কোনও সাইটে সমাহিত করা উচিত নয়।
ব্র্যাড কোচ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.