2012-06-25 20 views
13

Bir bitin nasıl ayarlanacağını, biraz temizleneceğini, biraz değişeceğini ve biraz ayarlanıp ayarlanmadığını kontrol ederim.C bit işlemleri/bir bitin bir bayttan diğerine kopyalanması

Ancak, nasıl bit kopyalayabilirim, örneğin bayt_1'nin 7'si bayt_1'den bit nr 7'ye bayt_2?

Bir if ifadesi olmadan (bitin değerini kontrol etmeden) mümkün mü?

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

    byte_2 = // what's next ? 

    return 0; 
} 
+0

Tek işlemde nasıl yapıldığını mı düşünüyorsunuz? Değilse, nasıl yapacağınızı zaten biliyorsunuz: bitin bayt 1'de kontrol edin, bit 2'de bit olup olmadığını kontrol edin, eğer aynı değilse, bit'i bayt2 olarak ayarlayın. –

+0

tek işlemde olmamalıdır, ancak bit değerini kontrol etmekten kaçınmak istiyorum (eğer mümkünse) – astropanic

+0

olası kopyası [koşulsuz bir başka imzalanmamış char'ın bir başka biti ile işaretsiz bir karakterin biraz ayarlanması] (http: //stackoverflow.com/questions/11170740/setting-a-bit-of-an-unsigned-char-with-the-another-bit-of-another-unsigned-char) – Heisenbug

cevap

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

Burada yapılan bazı önemli oylama değişiklikleri .... wtf bu mu? –

+1

geezzz ... bu oylamada her saniyede bir yanıp sönüyor ... – Mysticial

+0

@EitanT evet 0 – emesx

6
Önce byte2 ve or üzerinde Daha önce okuduğunuz bit bit temizlemek, byte1 den biraz okumak gerekir

:

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; 

Not diğer yanıtında formül (bunu uzatmak eğer Sadece bit 7 yerine değişkenler kullanmak, read_from ve write_to'un aynı değerde olduğu durumdur.

+0

Okuma biti 0 ise, bu Bu bit konumunda zaten 1 olan bir bayta yazmaz. –

+0

@CoreyOgburn, doğru. Yanıtı güncelledim – Shahbaz

İlgili konular