uint8 से int8 में रूपांतरण को लेकर भ्रम
गो में uint8 को int8 में परिवर्तित करने से अप्रत्याशित व्यवहार हो सकता है, जैसा कि निम्नलिखित में बताया गया है उदाहरण:
package main
import (
"fmt"
)
func main() {
a := int8(0xfc) // Compile error: constant 252 overflows int8
}
कोड एक संकलन-समय त्रुटि के साथ विफल हो जाता है क्योंकि स्थिरांक 0xfc int8 (-128 से 127) की सीमा से अधिक है। हालाँकि, निम्नलिखित कोड त्रुटियों के बिना संकलित होता है:
package main
import (
"fmt"
)
func main() {
a := 0xfc
b := int8(a) // Ok
}
अंतर संचालन के क्रम में है। पहले उदाहरण में, स्थिरांक को a को निर्दिष्ट करने से पहले int8 में परिवर्तित किया जाता है। दूसरे उदाहरण में, a को पहले 0xfc मान दिया गया है, और फिर int8 में परिवर्तित किया गया है।
गो भाषा विनिर्देश के अनुसार, स्थिर अभिव्यक्तियों को निरंतर प्रकार द्वारा प्रस्तुत किया जाना चाहिए। इस मामले में, 0xfc को int8 द्वारा प्रदर्शित नहीं किया जा सकता है, जिससे संकलन त्रुटि हो सकती है।
हालाँकि, जब असाइनमेंट के बाद रूपांतरण किया जाता है, तो a का मान (जो अब स्थिर नहीं है) की सीमा के भीतर है int8, रूपांतरण को सफल बनाने की अनुमति देता है।
व्यावहारिक उपयोग के मामलों के लिए, निम्नलिखित उदाहरण पर विचार करें:
type Char byte
var c Char = '世' // Error: '世' has value 0x4e16, too large.
यह कोड एक त्रुटि उत्पन्न करता है क्योंकि स्थिरांक '世' (0x4e16) का मान बाइट की सीमा से अधिक है ( 0 से 255). इसे ठीक करने के लिए, कोई निम्नलिखित तकनीक का उपयोग कर सकता है:
var c Char = Char('世') // Ok
इस मामले में, '世' को पहले असाइन किया गया है एक बाइट प्रकार और फिर चार में परिवर्तित किया गया। यह सुनिश्चित करता है कि मान चार प्रकार की सीमा के भीतर है। परिणामी मान के चिह्न को ध्यान में रखते हुए बाइट्स को int32 में परिवर्तित करते समय समान तकनीकों को लागू किया जा सकता है।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3