Ben "set" / "clear" komutunu beğendim, fakat ifadelerinizde belirsizliğe dikkat edin. Filip'in işaret ettiği gibi , "bool değişkenini ayarla" değişkene bir değer yazmak anlamına gelebilir. Ancak "bayrağın ayarlanması" daha açıktır.
İlgili terminoloji: 0 / sıfır olmayan bir tamsayı 0/1 değerine dönüştürmek "booleanizing" olarak adlandırılır .
Gerçekten de 0/1 değerini tam sayı olarak kullanırsanız (doğru / yanlış yerine bool
), bu sözcüğü kullanmak isteyebilirsiniz. Aksi halde, sadece derleyicinin gerçekleştirmesi gereken işlemlerin maliyetinden söz ediyorsanız ortaya çıkacaktır. (Ya da her bir vektör öğesinde hepsi bir arada / hepsi bir bit üretmek için bir SIMD karşılaştırması ile elle vektörleştiriyorsanız).
C ve C ++ 'da, bir bool
örtük olarak 0 veya 1 olarak bir tamsayıya dönüştürebilir ve normal uygulamalarda bool
0 veya 1 (yalnızca sıfır olmayan bir değer değil) bir bayt değer olarak depolanır. Verimli a && b
olmasına rağmen pratikte birçok C derleyicisi optimizasyonları kaçırmıştır .
bool booleanize(int a) { return a; } // C++
Bu işlev ret
, çoğu mimaride (dahil değildir ) birden çok talimat için derlenir . (MIPS, ilginç bir istisnadır, ayrı bir bayrak / durum kodu kaydı yerine, kayıt karşılaştırması talimatına sahiptir). x86-64, MIPS ve ARM thumb için Godbolt derleyici gezgininde , x86-64 sürümünü görüyoruz:
test edi, edi # set flags according to a & a
setne al
ret # return value in AL, the low byte of RAX
Maalesef ne booleanizing için biraz büyük / konu dışı!