İki tam sayı X ve Y verildiğinde, P konumundan P + N konumuna bitlerin üzerine yazmak istiyorum.Genel bir yolla bir tamsayıda bitlerin üzerine yazmak
Örnek:
int x = 0xAAAA; // 0b1010101010101010
int y = 0x0C30; // 0b0000110000110000
int result = 0xAC3A; // 0b1010110000111010
bu prosedür bir adı var mı? Maske varsa
, operasyon kolay yeterlidir:
int mask_x = 0xF00F; // 0b1111000000001111
int mask_y = 0x0FF0; // 0b0000111111110000
int result = (x & mask_x) | (y & mask_y);
Oldukça anlamaya, aşağıdaki jenerik C++ fonksiyonunda olduğu gibi, genel bir şekilde yazmaya nasıl edemez Ne:
template<typename IntType>
IntType OverwriteBits(IntType dst, IntType src, int pos, int len) {
// If:
// dst = 0xAAAA; // 0b1010101010101010
// src = 0x0C30; // 0b0000110000110000
// pos = 4 ^
// len = 8 ^-------
// Then:
// result = 0xAC3A; // 0b1010110000111010
}
sorun tamsayı genişliğine dahil tüm değişkenler, değişken olduğunda düzgün maskeleri nasıl bilemiyorum olmasıdır.
Yukarıdaki işlevi nasıl yazacağını bilen var mı?
Bu, dizenin tamamını maskelediğinizde özel bir durum mu gerektiriyor? Bu durumda olduğu gibi 1 << len taşacak. –
Gerçekten de taşacak, ancak yine de doğru cevabı verecektir. –