bits.cpp
#indude <stdio.h>
#include <memory.h>
#indude <string.h>
#indude <iostream.h>
#indude "..\inc\tips.h"
// Wskazówka 28.
const int cbitDWORD= sizeof(DWORD) * 8;
// Obraca bity cBits w danym podwójnym słowie. Wartością zwrotną funkcji jest // wynikowe podwójne słowo po obrocie.
DWORD RotateLeft(DWORD dw, int cBits)
II Wygenerowany kod.
I*
0040E813 mov eax,dword ptr [dw]
0040E816 mov ecx,dword ptr [cBits]
0040E819 shl eax,d
sizeof(DWORD) * 8 równa się 32 bajty, czyli 20h.
0040E81B mov ecx,20h
0040E820 sub ecx,dword ptr [cBits]
0040E823 mov edx,dword ptr [dw]
0040E826 shr edx,cl
0040E828 or eax,edx
*1
II Przesuwa podwójne słowo w lewo o cBits bitów i sprawdza wartość jego // alternatywy z wynikiem przesunięcia podwójnego słowa w prawo o liczbę // bitów w podwójnym słowie zmniejszoną o cBits. return (dw « cBits) | (dw » (sizeof(DWORD)*8 - cBits));
DWORD RotateRight(DWORD dw, int cBits)
return (dw » cBits) | (dw « (sizeof(DWORD)*8 - cBits));
// Klasa pozwalająca na manipulowanie polami bitowymi o zmiennej długości.
// Wskazówka 32. dass BF {
public:
BFA: