Diğer, ayrıca ilişkiyi belgelemek için bir enum kullanabilirsiniz. Normalde çabaya değmez, ama sadece bütünlük için ...
enum Encoding
{
Flag3 = 1, NotFlag3 = 0,
Flag2 = 1 << 1, NotFlag2 = 0,
Flag1 = 1 << 2, NotFlag1 = 0
};
int val = (boolVal1 ? Flag1 : NotFlag1) |
(boolVal2 ? Flag2 : NotFlag2) |
(boolVal3 ? Flag3 : NotFlag3);
Neden bu konuda rahatsız olursun? Bu sadece biraz daha geneldir, bu yüzden potansiyel olarak dağıtılmış kodlara gerçek değerleri kullanarak dokunmak zorunda kalmadan Kodlama değerlerini potansiyel olarak değiştirebilirsiniz (örneğin, bazı dosya veya ağ biçimlerine göre biraz dışarıda kaldığını fark ederseniz) ayrıştırmanız gereken veriler, bunu tek bir yere ekleyebilir ve yeniden derleyebilirsiniz). Tabii ki sadece tek bir kodlama/kod çözme işlevi sağlamak daha iyidir ve eğer yeni bayraklar ekliyorsanız hala ona ihtiyacınız olacak.
Flag1 ve NotFlag1 öğesinin bulunması anlamsız görünebilir olsa da, genellikle Yapışkan ve Kayan veya Erkek ve Kadın gibi birbirini dışlayan değerler gibi bir şeye sahip olmanız söz konusudur, ve istemcileri denetlemek için belirli bir neden yoktur. !! vb Erkek olarak Sabit veya Bayan ..
Sadece fyi, "doğru gerçek doğru" sonucu 7 değil mi? Aksi takdirde tüm formüller yanlıştır ... – SinisterMJ
'int val = 4 * boolVal1 + 2 * boolVal2 + boolVal3;' true olarak doğru 7 true verdiğinizde true 8 –
Doğru, yanlış yazdım. Düzeltmek için teşekkürler! – tzippy