2016-04-03 19 views

cevap

5

Eğer c eşitse 0 değerini döndürür ve c tek ise 1 değerini döndürür. & operatörü bir bit ve operatördür, bu durumda ilk bit geri dönmektedir.

4

ben satır satır alacağım: Bu code0 adında bir işlevi tanımlar

int code0(int c) { 

, ilk int dönüş türüdür ve ikinci int bir tamsayı çok

return c&1; 
olarak argüman c tanımlar

Bu, 1 karşı cbitwise and1 değerini döndürür - sonuç 1 veyaolacaktırişleve

} 

Bu sadece fonksiyon tanımını kapatır geçirilen c tamsayı son bitine bağlı.

Temelde bu işlev son olarak, aynı zamanda (0)

bu işleve geçmesi tamsayı son ikili bit ne dönmek, ya da basit terimlerle, c tek sayı olup olmadığını (1) hatta edecek Not, bu kadar basit bir şey için, genellikle bir işlev kullanmazdım ama bitly işlemi (örn. if(myvar&1==0)) koyacağından, son sonuçta bir dal veya ikiye olan ihtiyacı azaltabildiğinden, daha hızlı (her ne kadar inanıyorumsa) Modern derleyiciler, sizin için bu gibi basit işlevler inline için harika - hala, iyi uygulama derleyici optimizasyonları güvenmeyin diyor) - Slava tarafından işaret edildiği gibi, daha fazla compex için satır içi işlevleri kullanmak daha uygun olabilir se vakası.

+1

"Bu tür bir işlemi genellikle satır içi yapardım", c'nin tek veya çift olduğu durumlarda bu işlevin hesaplandığını varsaydınız, ancak olmayabilir.Daha sonra el ile satır içi değil, satır içi işlevini kullanın, neden olursa olsun değişebilir – Slava

+0

Özel olarak sorudaki işlevine atıfta bulunarak, '& 1' için bir takma addan biraz daha fazla - eğer daha karmaşık bir kullanım örtükse soruyu aynı tip bir operasyon olarak sınıflayamam. Cevabımı yeniden ödüllendireceğim; giriş için teşekkürler. – SteJ

+0

Muhtemelen tbh işleviyle yapışırdım. Gerçekte varsayarak iyi bir isme sahiptir, bu yüzden uygulamadan (bakım yapmak _much_ daha kolay) ayırma yapmaktan vazgeçirirsiniz. 2016'da, ummanıza ya da merak etmenize gerek yok: bu şeyleri kendiniz ifade etmek, bu gün ve yaşta bir optimizasyona karşı. Programınızı anlamlı bir şekilde yazın ve derleyicinin diğerlerini sıralamasına izin verin. –

1

Belirli bir tamsayı tek sayı mı yoksa çift sayı mı olduğunu öğrenmek için bu işlevi kullanabilirsiniz. Tüm tek sayı sayıları, ilk bitleri (en az anlamlı) olarak 1'e sahiptir. Örneğin

,

3 => 11

5 => Eğer code0(5) ararsanız 101

Yani, bu int 1 (=> 001 101 & 001) döndürecektir. Eğer code0(EVEN_NUMBER) ararsanız

, o zaman bu işlevi çağırarak herhangi tamsayı ilk bit (en önemsiz bit) durumu hakkında bilmek alabilirsiniz Yani int 0.

dönecektir.

İlgili konular