2012-06-25 14 views
13

मुझे पता है कि थोड़ा सेट कैसे करें, थोड़ा सा साफ़ करें, थोड़ा टॉगल करें, और जांचें कि थोड़ा सेट है या नहीं।सी बिट ऑपरेशंस/एक बाइट से दूसरे बाइट में एक बिट कॉपी करें

लेकिन, मैं बिट की प्रतिलिपि कैसे बना सकता हूं, उदाहरण के लिए byte_1 के nr 7 by bit nr 7 byte_2 में?

यह एक बयान के बिना संभव है (बिट के मूल्य की जांच किए बिना)?

#include <stdio.h> 
#include <stdint.h> 
int main(){ 
    int byte_1 = 0b00001111; 
    int byte_2 = 0b01010101; 

    byte_2 = // what's next ? 

    return 0; 
} 
+0

क्या आप इसे एक ऑपरेशन में कैसे करना चाहते हैं? यदि नहीं, तो आप जो करते हैं वह करते हैं जो आप जानते हैं कि कैसे करना है: बिट 1 में बिट की जांच करें, बिट 2 में बिट की जांच करें, अगर वे समान नहीं हैं, तो बिट 2 में सेट करें। –

+0

यह एक ऑपरेशन में नहीं होना चाहिए, लेकिन मैं बिट मान से पहले जांचना चाहता हूं (यदि यह संभव है) – astropanic

+0

संभावित डुप्लिकेट [किसी बिना हस्ताक्षरित चार का एक अन्य बिट के साथ सशर्त किए बिना किसी अन्य हस्ताक्षरित चार के साथ सेट करना] (http: //stackoverflow.com/questions/11170740/setting-a-bit-of-an-unsigned-char-with-the-another-bit-of-another-unsigned-char) – Heisenbug

उत्तर

23
byte_2 = (byte_2 & 0b01111111) | (byte_1 & 0b10000000); 
+5

अपडेट किया है कुछ प्रमुख मतदान परिवर्तन यहां जा रहे हैं .... wtf यह है? –

+1

गीज़ज़ ... इस पर वोट # प्रत्येक आधे सेकेंड में चमक रहा है ... – Mysticial

+0

@EitanT हाँ यह 0 – emesx

6

आप की जरूरत पहले byte1 से थोड़ा पढ़ने के लिए byte2 और or पर थोड़ा स्पष्ट सा आपके द्वारा पहले पढ़ी:

read_from = 3; // read bit 3 
write_to = 5; // write to bit 5 

the_bit = ((byte1 >> read_from) & 1) << write_to; 
byte2 &= ~(1 << write_to); 
byte2 |= the_bit; 

ध्यान दें कि अन्य जवाब में सूत्र (यदि आप इसे विस्तार चर का उपयोग करने के लिए, केवल बिट 7 की बजाय) उस मामले के लिए है जहां read_from और write_to समान मूल्य हैं।

+0

यदि रीड बिट 0 है, तो यह इसे एक बाइट को नहीं लिखेंगे जो पहले से ही उस स्थिति में 1 है। –

+0

@CoreyOgburn, ठीक है। मैंने जवाब – Shahbaz

संबंधित मुद्दे