Basit bir if sorusu

Başlatan Extreme, 09 Şubat 2015, 16:26:33

Extreme

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.

mir_as82

#1
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.



MrDarK

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.
Picproje Eğitim Gönüllüleri ~ MrDarK

ercan_t

merhaba

şöyle  olmaz mı

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


Extreme

Herkese teşekkürler

ercan_t,
dediğiniz yöntemle güzel bir şekilde çalıştı

mir_as82

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.

MrDarK

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 :)
Picproje Eğitim Gönüllüleri ~ MrDarK

mir_as82

#7
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ş.

esensoy

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,
En tehlikeli an "zafer" anıdır.

mufitsozen

#9
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

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!

Aptalca bir soru yoktur ve hiç kimse soru sormayı bırakana kadar aptal olmaz.

Karamel

Mufit hocamin verdigi linkte kisaca. islem onceligi icin parentheses kullanin diyor ::)

Gökhan BEKEN

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 :)
Özel mesaj okumuyorum, lütfen göndermeyin.

tekosis

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.
İlim ilim bilmektir, ilim kendin bilmektir, sen kendin bilmezsin, bu nice okumaktır.