Advertisement
Guest User

test

a guest
Oct 13th, 2015
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.93 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <iostream>
  3.  
  4. typedef unsigned char b_t; //byte type
  5. typedef unsigned short ush;
  6.  
  7. using namespace std;
  8.  
  9.  
  10.  
  11.  
  12. ush index() {
  13.     printf("Enter bit index (0..7): ");
  14.     size_t bit_i;
  15.     scanf("%d", &bit_i);
  16.     ush bit = bit_i & 8;
  17.     return bit;
  18. }
  19.  
  20.  
  21. ush get(b_t b, ush i) {
  22.     return (b >> (i % 8)) & 1;
  23. }
  24.  
  25.  
  26. b_t on(b_t b, ush i) {
  27.     return b | (1 << (i % 8));
  28. }
  29.  
  30.  
  31. b_t off(b_t b, ush i) {
  32.     return b & ~(1 << (i % 8));
  33. }
  34.  
  35.  
  36. b_t toggle(b_t b, ush i) {
  37.     return b ^ (1 << (i % 8));
  38. }
  39.  
  40.  
  41. void print_b(b_t b) {
  42.     for (short i = 7; i >= 0; --i) {
  43.         printf("%d", get(b, i));
  44.     }
  45. }
  46.  
  47.  
  48. b_t change_b(b_t b, b_t(*f)(b_t, ush)) {
  49.     ush bit = index();
  50.     print_b(b);
  51.     b = f(b, bit);
  52.     printf("\n Starting...\n");
  53.     for (int i = 0; i < 3; ++i) {
  54.         printf(".");
  55.         _sleep(2);
  56.     }
  57.     printf("\n Done. \n New byte: ");
  58.     print_b(b);
  59.     printf("\n");
  60.     return b;
  61. }
  62.  
  63.  
  64.  
  65. void main() {
  66.     printf("Enter value (0..255): \n");
  67.     int byte;
  68.     scanf("%i", &byte);
  69.     system("cls");
  70.  
  71.     bool flag = true;
  72.     while (flag) {
  73.         printf("Choose action:\n");
  74.         printf(" 0 - Print current byte\n");
  75.         printf(" 1 - Turn bit on\n");
  76.         printf(" 2 - Turn bit off\n");
  77.         printf(" 3 - Toggle bit\n");
  78.         printf(" 4 - Get bit\n");
  79.         printf(" 5 - Enter a new number\n");
  80.         printf(" q - Exit\n");
  81.         char n;
  82.         scanf(" %с", &n);
  83.  
  84.         switch (n) {
  85.  
  86.         case '0': {
  87.             printf("Enter value (0-255): \n");
  88.             scanf("%i", &byte);
  89.             break;
  90.         }
  91.  
  92.         case '1':{
  93.             byte = change_b(byte, on);
  94.             break;
  95.         }
  96.  
  97.         case '2':{
  98.             byte = change_b(byte, off);
  99.             break;
  100.         }
  101.  
  102.         case '3':{
  103.             byte = change_b(byte, toggle);
  104.             break;
  105.         }
  106.  
  107.         case '4': {
  108.             ush bit = index();
  109.             printf("The bit at index %d is %d\n", bit, get(byte, bit));
  110.             break;
  111.         }
  112.  
  113.         case '5':{
  114.             printf("Enter value (0..255): \n");
  115.             scanf("%i", &byte);
  116.             break;
  117.         }
  118.         case 'q':
  119.             flag = false;
  120.             break;
  121.  
  122.         default:
  123.             printf("Try again.\n");
  124.             break;
  125.  
  126.         }
  127.     }
  128.  
  129. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement