Напишите набор функциональных объектов, выполняющих побитовые логические операции над своими операндами. Проверьте эти объекты на векторах с элементами типа char, int, и bitset<67>.
Сделал примерчик для char и int, а для bitset не буду делать ну его нафиг. Да и еще не понятно почему для char когда мы сдвигаем влево на 1, а затем вправо на 1 то у нас обратный результат не получается.
Ладно от в общем код, сами если что разбирайтесь почему так получается.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
#include <iostream> using std::cout; using std::endl; #include <algorithm> using std::transform; #include <vector> using std::vector; //побитовый сдвиг на в лево на 1 int fun(int a){return (a<<1);} int fun1(int a){return (a>>1);} int main() { vector<int> v; for(int i=1;i<=10;i++) v.push_back(i); //вывод for(int i=0;i<v.size();i++) cout <<v[i]<<' '; cout <<endl; //здвинем влево на 1 transform(v.begin(),v.end(),v.begin(),fun); //вывод for(int i=0;i<v.size();i++) cout <<v[i]<<' '; cout <<endl; //сдвинем вправо на 1 transform(v.begin(),v.end(),v.begin(),fun1); //вывод for(int i=0;i<v.size();i++) cout <<v[i]<<' '; cout <<endl; //Теперь попробуем для типа чар vector<char> v1; v1.push_back('a'); v1.push_back('b'); v1.push_back('c'); v1.push_back('K'); for(int i=0;i<v1.size();i++) cout <<v1[i]<<' '; cout <<endl; //здвинем char на 1 влево transform(v1.begin(),v1.end(),v1.begin(),fun); //вывод for(int i=0;i<v1.size();i++) cout <<v1[i]<<' '; cout <<endl; //здвинем обратно на 1 вправо transform(v1.begin(),v1.end(),v1.begin(),fun1); //вывод for(int i=0;i<v1.size();i++) cout <<v1[i]<<' '; cout <<endl; return 0; } |
Да поморочился я понять почему оно так получается, но так ничего и не разобрался, нужно как то сначало сдвигать вправо, а затем уже влево как то так например.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
#include <iostream> using std::cout; using std::endl; #include <algorithm> using std::transform; #include <vector> using std::vector; #include <cstdlib> using std::exit; //побитовый сдвиг на в лево на 1 int fun(int a){return (a<<1);} int fun1(int a){return (a>>1);} char fun2(char a){return ((int)a>>1);} char fun3(char a){return ((int)a<<1);} int main() { vector<int> v; for(int i=1;i<=10;i++) v.push_back(i); //вывод for(int i=0;i<v.size();i++) cout <<v[i]<<' '; cout <<endl; //здвинем влево на 1 transform(v.begin(),v.end(),v.begin(),fun); //вывод for(int i=0;i<v.size();i++) cout <<v[i]<<' '; cout <<endl; //сдвинем вправо на 1 transform(v.begin(),v.end(),v.begin(),fun1); //вывод for(int i=0;i<v.size();i++) cout <<v[i]<<' '; cout <<endl; //Теперь попробуем для типа чар vector<char> v1; v1.push_back('a'); v1.push_back('b'); v1.push_back('c'); v1.push_back('K'); for(int i=0;i<v1.size();i++) cout <<(int)v1[i]<<' '; cout <<endl; //здвинем char на 1 влево transform(v1.begin(),v1.end(),v1.begin(),fun2); //вывод for(int i=0;i<v1.size();i++) cout <<(int)v1[i]<<' '; cout <<endl; //exit(1); //здвинем обратно на 1 вправо transform(v1.begin(),v1.end(),v1.begin(),fun3); //вывод for(int i=0;i<v1.size();i++) cout <<(int)v1[i]<<' '; cout <<endl; return 0; } |
[youtube]http://www.youtube.com/watch?v=LB5VhH68XTE[/youtube]