त्वरित सारांश:
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 से ।(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
से निकाला गया