Picproje Elektronik Sitesi

DERLEYİCİLER => Microchip XC Serisi => Microchip XC8 => Konuyu başlatan: Extreme - 09 Şubat 2015, 16:26:33

Başlık: Basit bir if sorusu
Gönderen: Extreme - 09 Şubat 2015, 16:26:33
if(Overflow_1 & 16)
{}
else
    {
komutlar
}

arkadaşlar şu an böyle kullanıyorum çok amatörce geliyor

bunu şöyle kullanmak istiyorum
if(Overflow_1 & 16 !=1)
    {
komutlar
}

ama olmuyor hatamı düzeltirseniz sevinirim.
Başlık: Ynt: Basit bir if sorusu
Gönderen: mir_as82 - 09 Şubat 2015, 16:39:15
Hocam önce 16!=1 yapılır Bunun sonucu hep "1" olur. Yani 16 farklıdır 1. Bu ifadenin ürettiği değer ile senin Overflow_1  değişkenini bitsel olarak Ve yapmış olursun.


Başlık: Ynt: Basit bir if sorusu
Gönderen: MrDarK - 09 Şubat 2015, 16:41:51
Derleyicilerde işlemler sağdan sola doğru yapılır diye biliyorum ; verdiğin örnekte parantez kullanmadığın için mir_as82 'inde dediği gibi 16!=1 işleminden değer döner.
Başlık: Ynt: Basit bir if sorusu
Gönderen: ercan_t - 09 Şubat 2015, 16:42:36
merhaba

şöyle  olmaz mı

if(!(Overflow_1 & 16))
{
komutlar...
}

Başlık: Ynt: Basit bir if sorusu
Gönderen: Extreme - 09 Şubat 2015, 16:44:47
Herkese teşekkürler

ercan_t,
dediğiniz yöntemle güzel bir şekilde çalıştı
Başlık: Ynt: Basit bir if sorusu
Gönderen: mir_as82 - 09 Şubat 2015, 16:45:49
Alıntı yapılan: MrDarK - 09 Şubat 2015, 16:41:51
Derleyicilerde işlemler sağdan sola doğru yapılır diye biliyorum ; verdiğin örnekte parantez kullanmadığın için mir_as82 'inde dediği gibi 16!=1 işleminden değer döner.

Hocam burada operatör önceliği var. != operatörü, & operatöründen önceliklidir.
Başlık: Ynt: Basit bir if sorusu
Gönderen: MrDarK - 09 Şubat 2015, 16:50:57
Alıntı yapılan: mir_as82 - 09 Şubat 2015, 16:45:49
Hocam burada operatör önceliği var. != operatörü, & operatöründen önceliklidir.
Doğrudur hocam; birşey merak ediyorum, yazılımcılar neden işini compiler'ın kollarına bırakır böyle ? Ben genelde compiler'a güveneceğime herşeyi şartlarıma göre parantezliyorum :)
Başlık: Ynt: Basit bir if sorusu
Gönderen: mir_as82 - 09 Şubat 2015, 17:06:54
Hocam C programcıları parantezi çok kullanmayı acemilik olarak görüyor:). Ben sadece kursunu aldım C nin aktif olarak C kodu yazmıyorum.
Bu olay derleyici bağımlı olmayan bir olay. Yani bu işin raconunu oluşturan komite bunları kesin çizgiler ile belirlemiş.
Başlık: Ynt: Basit bir if sorusu
Gönderen: esensoy - 09 Şubat 2015, 22:22:38
Bu noktada amatörlüğü ve profosyonelliği şeklen değil de çıkan kod miktarı ile ölçmek lazım,
İlk yazdığınız kod istediğinizi yapıyor ise daha az kod çıkarır gibi görünüyor,
Çıkan asm kodlarını karşılaştırmak lazım, birinci yöntem ikinci yöntemden daha az kod ile gerçekleştiriliyorsa maalesef ikinci yöntem için daha amatör demek gerekir,
Başlık: Ynt: Basit bir if sorusu
Gönderen: mufitsozen - 09 Şubat 2015, 22:33:41
Alıntı yapılan: mir_as82 - 09 Şubat 2015, 17:06:54
Hocam C programcıları parantezi çok kullanmayı acemilik olarak görüyor:). Ben sadece kursunu aldım C nin aktif olarak C kodu yazmıyorum.
Bu olay derleyici bağımlı olmayan bir olay. Yani bu işin raconunu oluşturan komite bunları kesin çizgiler ile belirlemiş.

Bu racon kesenlerle kesin cizgilerle belirleyen komite ..... ye ayip bir sey diyecegim ama..

Neyse CMU SEI (Carnegie Mellon University), SEI (Software Engineering Institue), CERT(Computer emergency Response Team) division Secure Coding rule  EXP00-C Soyle yazilmis: "Use parentheses for precedence of operation" https://www.securecoding.cert.org/confluence/display/seccode/EXP00-C.+Use+parentheses+for+precedence+of+operation (https://www.securecoding.cert.org/confluence/display/seccode/EXP00-C.+Use+parentheses+for+precedence+of+operation)

Ayrica: " Operator precedence: MISRA C gives an advisory rule that programmers should be generous in the use of parentheses in expressions, and that no .." Bundan sonrasi icin MISRA kural kitabini almaniz lazim.. :-)

vs vs

Boyle kulaktan dolma hersey inanmayin lutfen!

Başlık: Ynt: Basit bir if sorusu
Gönderen: Karamel - 09 Şubat 2015, 22:49:33
Mufit hocamin verdigi linkte kisaca. islem onceligi icin parentheses kullanin diyor ::)
Başlık: Ynt: Basit bir if sorusu
Gönderen: Gökhan BEKEN - 09 Şubat 2015, 23:37:10
Herhangi bir derleyicinin tabiki bir işlem önceliği olması şarttır. Yoksa nerden bilsin hangisini önce yapacağını.
Ancak kullanıcı olarak parantez kullanmak, kodun anlaşılabilirliği açısından şart olmasa da iyidir.
Bazen gerekmediği durumlarda bile parantez kullanırım, birbiri ile yakın ilişkili değişkenlerde felan...
Acemi diyenleri parantez içine alırım, yerini bilir :)
Başlık: Ynt: Basit bir if sorusu
Gönderen: tekosis - 11 Şubat 2015, 00:52:55
parantez kullanmak ilerideki aşamalarda da iyi oluyor. bazen kafam çok dolu olduğu halde önceden yazdığım bir kodu incelemem gerekiyor. bu gibi noktalarda parantez ile yapılan işlemler daha açık oluyor, kafa karıştırmıyor.