(*(pdw + 1)«cBitsRight); // Przesuwa cBits bitów z następnej zmiennej
// long do najmniej znaczącej pozycji.
// Przesuwa zmienną long w prawo. Dlaczego w prawo? Ponieważ // w procesorach X86 bity są ustawione od lewej do prawej.
// Tablica m_rgl zawiera wszystkie bity przechodzące od lewej do prawej, // tak jak w wypadku odwrotnego porządku w bajtach.
// Przenosi bity z ICarry do przestrzeni po lewej stronie po tym // przesunięciu.
*pdw »= cBits;
*pdw |= dwCarry;
// Wskazówka 22.
++pdw;
void BF::ShiftLeft(DWORD cbitShift)
DWORD Icdw;
DWORD IcBits;
DWORD IcdwUnchanged = m_cdw;
// Generuje błąd lub zwraca wartość logiczną, tak aby w praktycznych // zastosowaniach można było zgłosić błąd kodu wywołującego. if(0 == m_cbit) return;
if(cbitShift < 0) return;
// Chroni dalszy kod przed koniecznością obsługi ujemnej wartości II IcdwUnchanged itp.
// Chroni też przed dodatkowymi przesunięciami. if(cbitShift > m_cbit) cbitShift = m_cbit;
// Oblicza liczbę bajtów do przesunięcia. if(lcdw = (cbitShift / cbitDWORD))
// Liczba niezmienionych podwójnych słów, które trzeba przenieść w lewo. IcdwUnchanged = m_cdw - Icdw;
// memmove przenosi bajty więc, należy pomnożyć IcdwUnchanged przez II rozmiar podwójnego słowa w celu uzyskania liczby bajtów, o którą trzeba // przesunąć.
}
memmove(m_rgdw, m_rgdw + Icdw, IcdwUnchanged * sizeof(DWORD)); memset(m_rgdw + IcdwUnchanged, OL, lcdw*sizeof(DWORD));