Burada p
konumundan başlayan n
basamaklarını ayarlamak için bir bit deseni oluşturmak istiyorum. Basamaklar 0 to 31
'dan numaralandırılmıştır. Aşağıda yaptığım şey var.Biten işleçler kullanarak belirli bir bit deseni oluşturma
int bitPattern(int n, int p) {
int hex, num1, num2;
hex = 0x80000000;
num1 = (hex >> (31 - p));
num2 = (hex >> (31 - (n+p)));
return num1^num2;
}
Örnek: daha az operatör ile
bitPattern(6, 2) should return
..000011111100
herhangi bir alternatif çözüm?
Tanımsız davranışı, n + p> 31 olduğunda çağırıyorsunuz. Durumun asla garanti edilmemesi durumunda, yine de negatif bir sayıyı doğru kaydırarak uygulama tanımlı davranışınız vardır. Ama eğer UB'den korkmuyorsan, ne hakkında ((1 << n) - 1) << p'? –
@DanielFischer benim sorunumda (n + p) '31'in ötesine geçmeyecek ve bunu tanımlamak çok kolay ... – noufal
Neyse, yalnızca bitleri önemsiyorsanız, imzasız bir yazı kullanmanızı öneririm, ve sonra '((1 << n) - 1) << p',' n' veya 'p' negatif değilse veya türün genişliğine eşit veya daha büyük değilse güvenlidir. –