bits.c |
#include <stdio.h> unsigned int setbits(unsigned int x, int p, int n, unsigned int y); unsigned int getbits(unsigned int x, int p, int n); int power(int n); unsigned int rightrot(unsigned int x,unsigned int n); unsigned int invert(unsigned int x, int p, int n); main(){ unsigned int n = 255; unsigned int z = 177; n = n & z; printf("%d\tn after bitwise AND\n", n); n = 255; n = n | z; printf("%d\tn after bitwise OR\n", n); n = 255; n = n ^ z; printf("%d\tn after bitwise XOR\n", n); n = 255; n = n << 1; printf("%d\tn after left shift\n", n); n = n >> 1; printf("%d\tn after right shift\n", n); n = n & ~z; printf("%d\tn after bitwise AND + one's complement\n", n); n = 255; n = ~n; printf("%d\tn after one's complement\n", n); n = ~n; printf("%d\tn after one's complement\n", n); n = 255; n = n & 0177; printf("%d\tn after n & 0177\n", n); n = 255; z = 128; printf("%d\tn after setbits(255, 5, 5, 128)\n", setbits(n, 5, 5, z)); z = 128; printf("%d\tn after rightrot(z,3)\n", rightrot(z,3)); printf("%d\tn after invert(103, 1, 4)\n",invert(103, 1, 4)); return 0; } unsigned int getbits(unsigned int x, int p, int n){ return (x >> (p+1-n)) & ~(~0 << n); } unsigned int setbits(unsigned int x, int p, int n, unsigned int y){ unsigned int a = power(p)-1; unsigned int b = power(n)-1; //x = x & ~a; // y = y & ~b; return (x & ~a) | (y & b); } unsigned int invert(unsigned int x, int p, int n){ unsigned int z = 0; int j; printf("%d\tx in invert\n", x); for(j=p; j<=(p+n); j++){ z=z+power(j); } printf("%d\tz in invert\n", z); return x^z; } int power(int n){ int base = 2; if(n>1){ int p, i; p = 1; for(i = 1; i<=n; ++i){ p = p * base; } return p; } else if(n==1) return base; else return 1; } unsigned int rightrot(unsigned int x,unsigned int n){ return x >> n; } |
James Little |