Güvenli -1 true tüm bitlerini ayarlamak için kullanılır mı?
Bu deseni C & C çok kullanıldığını gördüm .
unsigned int flags = -1; // all bits are true
Bu iyi taşınabilir bir şekilde bunu yapmak için? Veya daha iyi 0xffffffff
~0
kullanıyor?
CEVAP
En düz ileri bir yana tam olarak gösterildiği gibi yapmanızı tavsiye ederim,. Çalışacak -1
başlatılamıyorher zaman, ~
bazen doğru işlenen bu tür olması gerekir, çünkü şaşırtıcı bir davranış olacaktır ancak gerçek işareti gösterimi bağımsız. Ancak o zaman unsigned
Bir tür en yüksek değerini alacak.
Olası bir örnek için sürpriz, bu bir düşünün:
unsigned long a = ~0u;
Mutlaka a
tüm parçaları ile bir desen 1 mağaza değil. Ama önce tüm bitleri unsigned int
, 1 ile bir model oluşturur ve sonra a
atamak. unsigned long
daha fazla bit varsa ne olur bunların hepsi 1.
Ve olmayan iki başarısız olacak bu bir düşünün, tamamlayıcı gösterimi:
unsigned int a = ~0; // Should have done ~0u !
Bunun nedeni ~0
tüm bitleri ters çevirmek için olmasıdır. İki -1
verecektir eviren tamamlayıcı makine (ihtiyacımız olan değerdir!), ama olacakdeğilbaşka bir temsili -1
verim. Bir birinin tamamlayıcısı makinesi, sıfır verir. Böylece, bir birinin tamamlayıcısı makine, yukarıda a
sıfır başlatılacaktır.
Anlamanız gereken şey değerleri - bit yok. Bu değişken ile başlatıldıdeğer. Başlatıcı değişken bit başlatma için kullanılan değiştirirseniz, değer bu bit göre oluşturulur. Gereken değeri, mümkün olan en yüksek değeri a
başlatmak için, -1
UINT_MAX
. İkinci a
*ile 24* ULONG_MAX
kullanmak gerekir türüne bağlı olacaktır. Ancak, ilk kendi türüne bağlıdır ve en yüksek değeri almanın güzel bir yolu var.
Bizdeğil-1
olup olmadığı hakkında konuşurken bir (her zaman değil) bit vardır. Ve ediyoruzdeğil~0
olup olmadığı hakkında konuşurken (elbette vardır) bit vardır.
Ama bahsettiğimiz şey flags
başlatılmamış değişkenin sonucudur. Ve bunun için,sadece -1
her tip ve makine ile çalışacak.
django: true varsayılan değer ayarlama...
Güvenli karma ve PHP şifreler için tuz...
Nasıl yansıması genel bir Yöntemi çağı...
Nasıl giriş alanına odaklanmak ayarlam...
Git bir şube birleştirmek için en iyi ...