Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <iostream>
- typedef unsigned char b_t; //byte type
- typedef unsigned short ush;
- using namespace std;
- ush index() {
- printf("Enter bit index (0..7): ");
- size_t bit_i;
- scanf("%d", &bit_i);
- ush bit = bit_i & 8;
- return bit;
- }
- ush get(b_t b, ush i) {
- return (b >> (i % 8)) & 1;
- }
- b_t on(b_t b, ush i) {
- return b | (1 << (i % 8));
- }
- b_t off(b_t b, ush i) {
- return b & ~(1 << (i % 8));
- }
- b_t toggle(b_t b, ush i) {
- return b ^ (1 << (i % 8));
- }
- void print_b(b_t b) {
- for (short i = 7; i >= 0; --i) {
- printf("%d", get(b, i));
- }
- }
- b_t change_b(b_t b, b_t(*f)(b_t, ush)) {
- ush bit = index();
- print_b(b);
- b = f(b, bit);
- printf("\n Starting...\n");
- for (int i = 0; i < 3; ++i) {
- printf(".");
- _sleep(2);
- }
- printf("\n Done. \n New byte: ");
- print_b(b);
- printf("\n");
- return b;
- }
- void main() {
- printf("Enter value (0..255): \n");
- int byte;
- scanf("%i", &byte);
- system("cls");
- bool flag = true;
- while (flag) {
- printf("Choose action:\n");
- printf(" 0 - Print current byte\n");
- printf(" 1 - Turn bit on\n");
- printf(" 2 - Turn bit off\n");
- printf(" 3 - Toggle bit\n");
- printf(" 4 - Get bit\n");
- printf(" 5 - Enter a new number\n");
- printf(" q - Exit\n");
- char n;
- scanf(" %с", &n);
- switch (n) {
- case '0': {
- printf("Enter value (0-255): \n");
- scanf("%i", &byte);
- break;
- }
- case '1':{
- byte = change_b(byte, on);
- break;
- }
- case '2':{
- byte = change_b(byte, off);
- break;
- }
- case '3':{
- byte = change_b(byte, toggle);
- break;
- }
- case '4': {
- ush bit = index();
- printf("The bit at index %d is %d\n", bit, get(byte, bit));
- break;
- }
- case '5':{
- printf("Enter value (0..255): \n");
- scanf("%i", &byte);
- break;
- }
- case 'q':
- flag = false;
- break;
- default:
- printf("Try again.\n");
- break;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement