#include <iostream>
using namespace std;
unsigned char rol(unsigned char val) {
int highbit;
if(val & 0x80) // 0x80 is the high bit only
highbit = 1;
else
highbit = 0;
// Left shift (bottom bit becomes 0):
val <<= 1;
// Rotate the high bit onto the bottom:
val |= highbit;
return val;
}
//**************************************88
unsigned char ror(unsigned char val) {
int lowbit;
if(val & 1) // Check the low bit
lowbit = 1;
else
lowbit = 0;
val >>= 1; // Right shift by one position
// Rotate the low bit onto the top:
val |= (lowbit << 7);
return val;
} ///:~
void printBinary(const unsigned char val)
{
for(int i = 7; i >=0; i--)
{
if(val & (1<<i))
cout << "1";
else
cout << "0";
}
}
//***************************************8
// A macro to save typing:
#define PR(STR, EXPR) \
cout << STR; printBinary(EXPR); cout << endl;
int main() {
unsigned int getval;
unsigned char a, b;
cout << "Enter a number between 0 and 255: ";
cin >> getval; a = getval;
PR("a in binary: ", a);
cout << "Enter a number between 0 and 255: ";
cin >> getval; b = getval;
PR("b in binary: ", b);
PR("a | b = ", a | b);
PR("a & b = ", a & b);
PR("a ^ b = ", a ^ b);
PR("~a = ", ~a);
PR("~b = ", ~b);
// An interesting bit pattern:
unsigned char c = 0x5A;
PR("c in binary: ", c);
a |= c;
PR("a |= c; a = ", a);
b &= c;
PR("b &= c; b = ", b);
b ^= a;
PR("b ^= a; b = ", b);
rol(b);
ror(a);
} ///:~
rol - przesuwa bity o jedną pozycję w lewo, pierwszy ląduje na ostatniej pozycji
ror - przesuwa bity o jedną pozycję w prawo, ostatni ląduje na pierwszej pozycji
printBinary - wypisuje bity od pierwszego do ostatniego
No i Wibowit o to mi właśnie chodzi między innymi...dlaczego te RoR i RoL nic nie wypisuje? Próbowałem kilku możliwości i nic... ;/
PR("rol b",rol(b));
PR("ror b",ror(b));
Dlatego, że czytasz to Thinking in C++ i chyba go za bardzo nie rozumiesz, tylko klepiesz na pałę z książki..
Skąd wiesz, że czytam?
A drugi tom czytałeś?
rol i ror nic nie wypisują, bo przede wszystkim nie ma w nich żadnej instrukcji, która by coś wypisywała na ekran. Poza tym podane implementacje rol i ror pobierają argument przez wartość i zwracają wartość zmodyfikowaną, więc odpalanie rol i ror bez robienia czegokolwiek z wynikiem jest bezsensowne.
Dzięki.
Trochę się w tym pogubiłem (ciągle się uczę) dziękuję Wam za pomoc.