Aralarında bir döngü kullanmadan, 1 bit sayısına sahip olmak için bir yönteme bakıyorum. herhangi bir vücut bana yardımcı olabilir ve bana kod ya da algoritma bunu yapmak için sağlayabilir. Şimdiden teşekkürler. Bit Twiddling Hacks1 sayısı 32 bit sayısı
cevap
standart referans bakınız bit sayısı kümesine sayı. Dört sonucu ekleyin, presto!
Ayrıca Mitch Buğday söylediklerini görmek - Bit işe yaramaz eğlenceli olabilir;)
Sadece Java girişlerinin * her zaman * imzalandığını ve buna göre değiştireceğinizi unutmayın. – erickson
Bölünmüş dört 8 bit numaraları içine 32 bitlik bir sayı (döküm bit operatör kaydırma vb bakınız)
sonra 8 bit dönüştürür 256 kayıt girişine sahip bir arama kullanımı:
nasıl çalıştığını görmek istiyorsanız Integer.bitCount(int)
. Sen kaynak koduna başvurabilirsiniz bakın; Integer
sınıfının bit Raketi çevirmek rutinleri birçok Sen yinelemeli bunu tanımlayabilir Hacker's Delight.
Evet! Zaten mevcut bir yöntem olduğunda, neden bir egzotik bit hack kullanın. – Buhb
Yerleşik kullanımı, JVM'nin gelecekteki sürümlerinin SSE4.2 POPCNT komutunun bunun için kullanılabileceğini anlamasını da kolaylaştıracaktır. JRE yöntemi için –
+1. Partiyi bozmak için –
alınmıştır:
int bitcount(int x) {
return (x==0) ? 0 : (x & 1 + bitcount(x/2));
}
Yukarıdaki kod test değildir ve muhtemelen sadece x> = 0 için çalışır. Umarım, Bit Twiddling Hacks doğrudan neyse fikri ...
-1. Elbette, bir döngü yapısı kullanmıyor, ancak hala O (1) olmayan bir zamanda çalışıyor. – unwind
Üzgünüm. Soru bana bir ev ödevi problemini andırdı ve ben farklı bir görüş sağlamak istedim. Teorik olmayan uygulamaların yanı sıra kritik performanslar için, bit-twiddling çözümleri için gidin! – SteinNorheim
klasik olan: dönüş (x == 0)? 0: (1 + bit sayısı (x & (x - 1))); – Olexiy
Benim kişisel favori alacak:
v = v - ((v >> 1) & 0x55555555);
v = (v & 0x33333333) + ((v >> 2) & 0x33333333);
c = ((v + (v >> 4) & 0xF0F0F0F) * 0x1010101) >> 24;
NB: Bu, Java'nın imzalı int türüyle doğru şekilde çalışmaz - ancak temel fikir kütüphane tarafından kullanılanıdır. – erickson
Sanırım >>> yerine >>>. – finnw
@finnw: Sanırım Java'da kastediyorsunuz (çünkü C'de böyle bir operatör yok, bu numarayı ilk gördüğüm/kullandım), bu durumda haklısınız, işaretin yanlış kalmasını sağlayın. –
Kısa, müstehcen optimize cevap (C):
int pop(unsigned x) {
x = x - ((x >> 1) & 0x55555555);
x = (x & 0x33333333) + ((x >> 2) & 0x33333333);
x = (x + (x >> 4)) & 0x0F0F0F0F;
x = x + (x >> 8);
x = x + (x >> 16);
return x & 0x0000003F;
}
nedenini öğrenmek için Bu sihir, 'un Güzel Kodu numaralı telefondan Henry S. Warren, Jr. Ardından
Ama soru Java ile ilgili ve Java'da imzasız 32 bit int türü yok ve bu Java'nın imzalı 32 bit int ile çalışmıyor. . – Jesper
Görebildiğim kadarıyla, söz konusu Java'dan bahsedilmiyor. Belki de yanıldım, ancak bir soruyu belirli bir dile sınırlamak için etiket kullanılmamalıdır. – lindelof
IMO yanılıyorsunuz. Bir soru Java ile etiketlenmişse, başka bir soru, bunun Java ile ilgili sorusu dışında ne anlama geliyor? Belki de soru soran, Java hakkında konuştukları metinden de bahsetmeli, ancak eğer yapmazlarsa, bunu Java olarak etiketlemediğini iddia etmemiz gerektiğini düşünmüyorum. Bir C cevabının kabul edilebilir olduğunu kabul ederseniz, bir GCC'ye sadece C yanıtının kabul edilebilir olduğunu ve __builtin_popcount'u kullanacağını söyleyebilirim. Ancak bu soruya çok fazla yardımcı olmuyor ;-) –
Integer.bitCount
arasındapublic static int bitCount(int i) {
// HD, Figure 5-2
i = i - ((i >>> 1) & 0x55555555);
i = (i & 0x33333333) + ((i >>> 2) & 0x33333333);
i = (i + (i >>> 4)) & 0x0f0f0f0f;
i = i + (i >>> 8);
i = i + (i >>> 16);
return i & 0x3f;
}
- 1. CAAnimasyon -1 tekrar sayısı?
- 2. T-SQL'de bit sayısı çevirme işlemleri
- 3. Makalelerdeki yorumların sayısı sayısı
- 4. C# 0-1 Sırt Çantası Sorunun bilinen toplam sayısı ve sıfır sayısı ile sayısı
- 5. sayısı
- 6. Satır sayısı satır sayısı csv.DictReader
- 7. Kodların sayısı VS Sayıların sayısı
- 8. Dizi sayısı eksi dizi sayısı
- 9. histogramı: giriş sayısı ve sayısı R
- 10. php glob pattern eşleşme sayısı basamak sayısı
- 11. 1 kayıt geri alma sayısı nedir?
- 12. Kont ayrı değer başka değerin sayısı = 1
- 13. Neden konu sayısı C'den fazla 1 #
- 14. Satır başına benzersiz değerlerin sayısı sayısı
- 15. Sayma sayısı:
- 16. Sütun sayısı
- 17. Beklenen sayısı
- 18. Count sayısı
- 19. "()" çiftlerinin sabit sayısı için Parenthesizations sayısı
- 20. Dizide toplam öğe sayısı sayısı olsun
- 21. Parametre Bazında Satır Sayısı Sayısı. (Excel VBA)
- 22. İmzasız 32 bit int imzasız 32 bit int nasıl dönüştürülür?
- 23. maksimum sayısı
- 24. öğesinin sayısı
- 25. Hex Sayısı
- 26. sayısı boruları
- 27. Ondalık olarak en küçük imzalı 16 bit sayısı
- 28. sayısı yedek uzunluğu
- 29. CUDA çekirdekleri vs iplik sayısı
- 30. Julia'da süreç sayısı
örn JDK 1.5 uygulamasıdır 2344'ten 2,3,4,4'e kadar ister misin? Lütfen giriş ve gerekli çıkış ile netleştirin –