Bitsel mantıksal işlemleri ve bit kaydırmayı kullanırsınız. (Bu terimleri bir Google arama size bazı örnekler verebilir.)
Temelde o zaman yapmak istediğiniz bit, o zaman "shift" tamsayı değerleri (vb int
, char
dahil) bir tamsayı türü bildirmek bir OR veya bir AND tamsayı ile. (C++)
Bazı hızlı açıklayıcı örnekler: Bu sabit boyutta (sizeof(int) * 8
bit) "bit dizileri" sağlar
inline bool bit_is_on(int bit_array, int bit_number)
{
return ((bit_array) & (1 << bit_number)) ? true : false;
}
inline void set_bit(int &bit_array, int bit_number)
{
bit_array |= (1 << bit_number);
}
inline void clear_bit(int &bit_array, int bit_number)
{
bit_array &= ~(1 << bit_number);
}
not edin. Belki senin için sorun değil, belki de bunun üstünde bir şey inşa etmek isteyeceksin. (Ya da bazı kütüphane ne sağlarsa kullanın.)
Bu, bool
dizilerinden daha az bellek kullanacaktır ... NASIL ... Bu bitlere erişmek için derleyicinin oluşturduğu kod daha büyük ve daha yavaş olacaktır. Dolayısıyla, bu bit dizilerini içermesi gereken çok sayıda nesneye sahip değilseniz, hem hız hem de bellek kullanımı üzerinde net-negatif bir etkiye sahip olabilir.
#define BITOP(a,b,op) \
((a)[(size_t)(b)/(8*sizeof *(a))] op ((size_t)1<<((size_t)(b)%(8*sizeof *(a)))))
Sonra size_t
daha büyük işaretsiz tamsayı elemanlarının herhangi dizisi için, BITOP
makro biraz dizi olarak dizi erişebilirsiniz:
birinin kullanabilirsiniz şey yazılı olup olmadığını görmek için arama denediniz mi? İnsanlar senin için sadece senin kodunu yazmayacaklar. –
Aslında bir soru sorarak ve cevaplayarak yazdığım bazı kodları paylaşmaya çalışıyordum, ancak bu site çok hızlı! 10 dakika içinde cevapımı bir araya getirmemi sağladı, zaten iki cevap çıktı! –
SO, kendinize cevap verebilecek sorular sormaz. Ve hatta o zaman bile web üzerinde konuyla ilgili olanı araştırmayı düşünebilir ve yaklaşımınızı ilk önce ne bulduğunuzla karşılaştırın. –