तुम भी सिर्फ एक 8 बिट पूर्णांक के रूप में base_num
घोषित कर सकता है: अपने संकलक मानकों तारीफ है
#include <stdint.h>
uint8_t base_num;
uint16_t crap;
crap = 0xFF00;
base_num = crap;
है, यह base_num
में byte(0xFF00)
(0x00
) का मूल्य डाल देंगे।
मैं एक संकलक कि सादा सी (न सी ++ या सी #) में गणित संतृप्त करता है को पूरा करने के लिए अभी तक है, लेकिन यदि ऐसा है, तो यह base_num
में sat_byte(0xFF00)
जो 0xFF
से अधिक होने का मूल्य रखा जाएगा, यह 0xFF
डाल देंगे।
ध्यान रखें कि आपका कंपाइलर आपको इस उदाहरण में सटीकता के नुकसान की चेतावनी देगा। आपका कंपाइलर इस मामले में त्रुटि कर सकता है (विजुअल स्टूडियो Treat Warnings as Errors
चालू है)। अगर ऐसा होता है, तो आप सिर्फ कर सकते हैं:
base_num = (uint8_t)crap;
लेकिन यह क्या आप से बचने के लिए कोशिश कर रहे हैं की तरह लगता है।
आप ऐसा करने का प्रयास कर रहे हैं ऐसा लगता है कि मॉड्यूलस ऑपरेटर को निकालना है क्योंकि इसके लिए एक विभाजन और विभाजन सबसे महंगा मूल अंकगणितीय ऑपरेशन है।मैं आम तौर पर किसी भी "बुद्धिमान" संकलक (यहां तक कि डिबग मोड में) के रूप में किसी भी तरह से एक टोंटी के रूप में इस के बारे में सोच नहीं होता "का अनुकूलन" हैं यह करने के लिए:
base_num = crap & 0xFF;
एक समर्थित मंच पर
(हर मुख्यधारा प्रोसेसर मैंने के बारे में सुना - x86, AMD64, एआरएम, एमआईपीएस), जो कोई भी होना चाहिए। मैं एक प्रोसेसर की बात सुनने के लिए डूब गया होगा जिसमें कोई बुनियादी और या अंकगणितीय निर्देश नहीं हैं।
स्रोत
2012-11-26 16:53:38
'आधार' स्थिर है, या यह बदलता है? – Xymostech
यदि कंपाइलर कुछ भी लायक है, तो यह प्रत्येक प्लेटफॉर्म पर '% 256'' को '0xFF 'के साथ बदलता है जहां यह'% 'से तेज़ है। 'आधार' का मूल्य क्या है? –
आप 'base_num' को 8 बिट (हस्ताक्षरित) पूर्णांक –