- Get link
- X
- Other Apps
Featured Post
Posted by
Unknown
on
- Get link
- X
- Other Apps
This is a multi purpose bit operations program.
I have covered the most basic operations that can be performed using bitwise operators.
I have covered the most basic operations that can be performed using bitwise operators.
#include <stdio.h> #include <stdlib.h> #define CHAR_BIT 8 //No. of bits in a byte #define BAD_INPUT_CUTOFF 3 int str[32]; enum {S=0,U}; //S-Set U-Unset void showbits(unsigned int); void toggle(int *inp) { int mask = 0XFFFFFFFF; *inp = mask ^ *inp; showbits(*inp); } void detectset(unsigned int inp) { int i , flag = 0; unsigned int mask = 0x80000000; int s = sizeof(inp) * CHAR_BIT - 1; for(i=0; i < s; i++) { if((mask & inp)!= 0 ) { printf("%dth ,",i+1); flag = 1; } mask = mask >> 1; } if(flag == 1) { printf(" bits are set\n"); } else { printf("\nNone of the bits are set\n"); } } void set_unset(int *inp,int op) { int n,temp; unsigned int mask; if(op == S) { printf("\nEnter the bit(1-32) which you want to set: "); scanf("%d",&n); mask = 0x80000000; mask = mask>>(n-1); temp = *inp; if((*inp = *inp | mask ) == temp) { printf("\nThe bit was set already\n"); return; } } else if(op == U) { printf("\nEnter the bit(1-32) which you want to unset: "); scanf("%d",&n); mask = 0x80000000; mask = mask>>(n-1); temp = *inp; if((*inp = *inp ^ mask ) == temp) { printf("\nThe bit was unset already\n"); return; } } else { printf("\nSecond Argument must be S or U !!!"); return; } } void check_set(int inp) { int n; printf("\nEnter which bit you want to check : \n"); scanf("%d",&n); unsigned int mask = 0x80000000 >> n-1; //Mask is 32bit 1000 0000 0000 0000 0000 0000 0000 0000 if ( mask & inp ) { // AND (&) of the two will be 0000 0000 0000 0000 (false) printf("Input has %dth bit set. \n",n); } else { printf("Input has %dth bit unset. \n",n); } } void showbits(unsigned int value) { unsigned int bit; for ( bit = (-1U >> 1) + 1; bit > 0; bit >>= 1 ) { putchar(value & bit ? '1' : '0'); } putchar('\n'); } void reverse_bits(unsigned int *inp) { unsigned int rev = *inp; int s = sizeof(*inp) * CHAR_BIT - 1; // extra shift needed at end for (*inp >>= 1; *inp; *inp >>= 1) { rev = rev << 1; rev = rev | (*inp & 1); s--; } rev = rev << s; *inp = rev; showbits(*inp); } int main() { int input ,ch ; printf("\nEnter an integer of size %d bytes to be displayed in binary : ",sizeof(int)); scanf("%d", &input); while(1) { printf("\n1.Toggle all bits\n2.Detect all set bits\n3.Set a bit\n4.Unset a bit\n5.Check bit status\n6.Reverse bit pattern\n7.Show the bit pattern\n8.Exit\nEnter your choice : "); scanf("%d",&ch); switch(ch) { case 1 : toggle(&input); break; case 2 : detectset(input); break; case 3 : set_unset(&input,S); break; case 4 : set_unset(&input,U); break; case 5 : check_set(input); break; case 6 : reverse_bits(&input); break; case 7 : showbits(input); break; case 8 : exit(0); } } }
Comments
Post a Comment
Please post your valuable suggestions