Merhaba
a değişkeninin x bitini okuyup bu değeri
b değişkeninin x bitine aktarmak istiyorum
int8 a,b;
int1 x;
x = bit_test(a,0); // burada x bitine a'nın 0 ncı bit durumu alınıyor
b = ?
b değişkeninin 0 ncı bitine bu okuduğum bilgiyi aktarmam gerekiyor
bunu nasıl yapabilirim
CCS C help de bit işlemleriyle ilgili fonksiyonlar var. Help i biraz daha kurcalayarak zaman kazanabilirsiniz.
set_bit(byte,bit_no); fonksiyonu var, istenilen byte ın istenilen bitini lojik 1 yapıyor. clear_bit(byte,bit_no) de tam tersini yapıyor. bit_test in sonucunu "if" ile kontrol edip işlemi yapabilirsiniz. Kolay gelsin.
int8 a,b;
int1 x;
x = bit_test(a,0); // burada x bitine a'nın 0 ncı bit durumu alınıyor
if (x==1)set_bit(b,0);
else bit_clear(b,0);
şeklinde çözüm buldum ama uzun bir çözüm oldu gibi geldi daha kestirme bir çözüm varmıdır.
AND ile yapmayı denedim b değişkeninin diğer bitleri değişti
b değişkenin diğer bitlerinin de eski durumunun değişmemesi gerekiyor
Bunun icin b de x pozisyonundaki biti sifirlayip, a nin x posizyonundaki biti ile orlamalisin.
x, 0..7 olmak uzere bit numarasi
Asagidaki ifadeyi C de diledigin gibi yaz
b = (b and (255 - 2^x)) or (a and 2^x)
255 - 2^x yerine not X
2^x yerine 1<<x vs de yapabilirsin.