Bu komutları bilen varmı?

Başlatan universitelim54, 04 Haziran 2018, 00:18:51

universitelim54

 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

Mucit23

16 bitlik bir sayı(deger1) 2 adet 8 bitlik parçaya bölünmüş

LowByte intsayi1
HighByte intsayi2

universitelim54

mucit23 süpersin tşk 2 sorudaki cevabınız  nedir acaba


Kabil ATICI

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..
ambar7

foseydon

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.

mir_as82

İf içindeki d nin ne olduğu belli olmadığından compile time hatası alırsın bence

sadogan

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.

foseydon

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.

universitelim54

d 8 bit int değerdir cevaplar için herkese teşekkürler kabil kardeşimizin dediği gibi bir sonuç aldım

sadogan

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.

ete

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
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

fide

@ete hocam güzel açıklamışsınız. Teşekkürler
Her birimiz, geride bıraktığımız eserler kadar ölümsüzüz. Evlat gibi, talebe gibi, icatlar gibi...   http://fidenetgaraj.blogspot.com

devrecii

İ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.

universitelim54

32bitlik bir veri spi haberlesme ile birsensore atilmak isteniyor buyuzden veri8 bite parcalaniyor