mrb arkadaşlar aşagıdaki komutları bilen bir arkadaş yorumlayabilir mi .
1 soru
byte intsayi1 = (deger1 & 0xFF);
byte intsayi2 = ((deger1 >> 8) & 0xFF);
2 soru
if(d & 0x80 ==0x80 )
{
}
Saygılarımla
16 bitlik bir sayı(deger1) 2 adet 8 bitlik parçaya bölünmüş
LowByte intsayi1
HighByte intsayi2
mucit23 süpersin tşk 2 sorudaki cevabınız nedir acaba
bunlar C'de kullanılan genel kodlar
ikincisi herhangi bir değişkenin en anlamlı bitinin 1 olup olmadığını kontrol etmek üzere kullanılıyor.
giriş değişkeninin önce en anlamlı bitini izole (AND işlemi ile) ediyor, sonra bu değerin 1 olup olmadığını kontrol ediyor..
ikinci sorudaki ifade bence hatalı. yanlış hatırlamıyorsam == operatörü & operatöründen önce hesap ediliyor, bu durumda ifade her türlü doğru çıkar.
İf içindeki d nin ne olduğu belli olmadığından compile time hatası alırsın bence
Alıntı yapılan: foseydon - 04 Haziran 2018, 11:14:01ikinci sorudaki ifade bence hatalı. yanlış hatırlamıyorsam == operatörü & operatöründen önce hesap ediliyor, bu durumda ifade her türlü doğru çıkar.
Yanlış hatırlıyorsunuz.
Alıntı yapılan: sadogan - 04 Haziran 2018, 16:54:56Yanlış hatırlıyorsunuz.
siz söyleyince kontrol ettim, doğru hatırlıyormuşum.
http://en.cppreference.com/w/c/language/operator_precedence
önemi de yok, parantez işareti ile niyet açıkça belli edilmeli bence.
d 8 bit int değerdir cevaplar için herkese teşekkürler kabil kardeşimizin dediği gibi bir sonuç aldım
Alıntı yapılan: foseydon - 04 Haziran 2018, 16:57:15siz söyleyince kontrol ettim, doğru hatırlıyormuşum.
http://en.cppreference.com/w/c/language/operator_precedence
önemi de yok, parantez işareti ile niyet açıkça belli edilmeli bence.
Kontrol ettim , ben yanlış hatırlıyormuşum.
Kodların yanlış yada doğruluğu konusunda bir yorum yapmadan yapılmak istenenleri açıklamayı tercih ediyorum.
1 soru
byte intsayi1 = (deger1 & 0xFF);
Burada Deger1 ile $FF sayısı AND işlemine sokuluyor ve sonuç Byte değişkeni olan sayı1 değişkenine veriliyor.Burada temel amaç deger1 değişkeninin HIGH olan bitleri kopyalanıp Sayı1 değişkenine aktarılıyor.
byte intsayi2 = ((deger1 >> 8) & 0xFF);
Burada Önce deger1 8 bit sağa kaydırılıyor sonra elde edilen bu sayı $FF ile AND işlemine sokuluyor ve sonuç Sayı2 ye veriliyor. Yine amaca bakarsak Muhtemelen 16 bitlik olan deger1 değişkeninin Yuksek değerlikli kısmı düşük değerlikli kısama kaydırılıyor ve sayı otomatikman 8 bite indirgenip o kısmı alınıp Sayı2 değişkenine aktarılıyor.
2 soru
if(d & 0x80 ==0x80 )
Burada Şayet d AND $80=$80 şeklinde bir ifade var. Bunu binary yazarsak daha iyi anlaşılır. d AND %10000000=%10000000 kısaca bu işlem d isimli değişkenin 7 ci bitinin HIGH olup olmadığına bakıyor.
Ete
@ete hocam güzel açıklamışsınız. Teşekkürler
İkinci problemi şu şekilde yaparsanız optimizasyon yapmış olursunuz
Sadece bu kadar
if( d & 0x80)
{
}
Birincide eğer direk hafızadan byte olarak alrısanız optimizasyon yapmış olursunuz. 16bit iki byte dir tek tek alabilirsiniz.
Mcu lar yavaş biliyorsunuz optimizasyon şart.
32bitlik bir veri spi haberlesme ile birsensore atilmak isteniyor buyuzden veri8 bite parcalaniyor