দ্রুত সংক্ষিপ্তসার:
import "math/bits"
const (
MaxUint uint = (1 << bits.UintSize) - 1
MaxInt int = (1 << bits.UintSize) / 2 - 1
MinInt int = (1 << bits.UintSize) / -2
)
পটভূমি:
আমি অনুমান করি যে আপনি জানেন, uint
টাইপটি হ'ল আকারের uint32
বা আপনার আকারের uint64
প্ল্যাটফর্মের উপর নির্ভর করে। সাধারণত, কেউ যখন এর সর্বোচ্চ আকারের কাছাকাছি আসার ঝুঁকি না থাকে কেবল তখনই এর অপ্রচলিত সংস্করণটি ব্যবহার করতে পারেন, কারণ মাপের নির্দিষ্টকরণ ব্যতীত সংস্করণটি প্ল্যাটফর্মের উপর নির্ভর করে "দেশীয়" টাইপটি ব্যবহার করতে পারে যা দ্রুত হতে থাকে।
নোট করুন যে এটি "দ্রুত" হতে থাকে কারণ বৃহত্তর বা ছোট পূর্ণসংখ্যার অনুকরণের জন্য প্রসেসরের দ্বারা কখনও কখনও অ-নেটিভ টাইপ ব্যবহার করার জন্য অতিরিক্ত গণিত এবং সীমা পরীক্ষা করা প্রয়োজন। এই বিষয়টি মনে রেখে, সচেতন থাকুন যে প্রসেসরের (বা সংকলকের অনুকূলিত কোড) পারফরম্যান্সটি আপনার নিজের সীমানা-চেকিং কোড যুক্ত করার চেয়ে প্রায় সর্বদা ভাল হতে চলেছে, সুতরাং যদি এটির কোনও ঝুঁকি থাকে তবে এটি কার্যকর হতে পারে কেবলমাত্র স্থির আকারের সংস্করণটি ব্যবহার করার জন্য অনুভূত হোন এবং অনুকূলিতকরণটি যে কোনও ফলআউটটিকে পরিচালনা করতে পারে।
এটি বলা হয়ে যাওয়ার পরেও এখনও কিছু পরিস্থিতি রয়েছে যেখানে আপনি কী নিয়ে কাজ করছেন তা জেনে রাখা কার্যকর।
" গণিত / বিটস " প্যাকেজটিতে বিটের আকার রয়েছে uint
। সর্বাধিক মান নির্ধারণ করতে, 1
অনেকগুলি বিট, বিয়োগ 1 দ্বারা শিফট করুন ie অর্থ:(1 << bits.UintSize) - 1
নোট করুন যে সর্বাধিক মান গণনা করার সময় uint
, আপনি সাধারণত এটি স্পষ্টভাবে একটি uint
(বা বৃহত্তর) ভেরিয়েবলের মধ্যে রেখে দিতে হবে, অন্যথায় সংকলকটি ব্যর্থ হতে পারে, কারণ এটি গণনাটিকে একটি স্বাক্ষরিত করার ক্ষেত্রে ডিফল্ট হবে int
(যেখানে, যেমনটি হওয়া উচিত স্পষ্টত, এটি মাপসই করা হবে না), তাই:
const MaxUint uint = (1 << bits.UintSize) - 1
এটি আপনার প্রশ্নের সরাসরি উত্তর, তবে আপনার আগ্রহী হতে পারে এমন কয়েকটি গণনাও রয়েছে।
মতে বৈশিষ্ট , uint
এবং int
সবসময় একই আকার আছে।
uint
32 বা 64 বিট হয়
int
হিসাবে একই আকার uint
সুতরাং আমরা int
একই ধরণের উত্তরটি নিয়ে এবং তার 2
পরে বিয়োগ করে বিয়োগ করে সর্বোচ্চ মান নির্ধারণ করতেও এই ধ্রুবকটি ব্যবহার করতে পারি 1
। অর্থাৎ,(1 << bits.UintSize) / 2 - 1
এবং ন্যূনতম মান int
, 1
যে অনেক বিট দ্বারা স্থানান্তরিত এবং ফলাফল ভাগ করে -2
। অর্থাৎ,(1 << bits.UintSize) / -2
সংক্ষেপে:
MaxUint: (1 << bits.UintSize) - 1
MaxInt: (1 << bits.UintSize) / 2 - 1
MinInt: (1 << bits.UintSize) / -2
সম্পূর্ণ উদাহরণ (নীচের মত একই হওয়া উচিত)
package main
import "fmt"
import "math"
import "math/bits"
func main() {
var mi32 int64 = math.MinInt32
var mi64 int64 = math.MinInt64
var i32 uint64 = math.MaxInt32
var ui32 uint64 = math.MaxUint32
var i64 uint64 = math.MaxInt64
var ui64 uint64 = math.MaxUint64
var ui uint64 = (1 << bits.UintSize) - 1
var i uint64 = (1 << bits.UintSize) / 2 - 1
var mi int64 = (1 << bits.UintSize) / -2
fmt.Printf(" MinInt32: %d\n", mi32)
fmt.Printf(" MaxInt32: %d\n", i32)
fmt.Printf("MaxUint32: %d\n", ui32)
fmt.Printf(" MinInt64: %d\n", mi64)
fmt.Printf(" MaxInt64: %d\n", i64)
fmt.Printf("MaxUint64: %d\n", ui64)
fmt.Printf(" MaxUint: %d\n", ui)
fmt.Printf(" MinInt: %d\n", mi)
fmt.Printf(" MaxInt: %d\n", i)
}
int(^uint(0) >> 1) // largest int
থেকে নিষ্কাশিত golang.org/doc/effective_go.html#printing