bits.c
contents ::
  address.c
  atquick_sort.c
  bits.c
  countspace.c
  ctof.c
  hextoint.c
  hist.c
  indexof.c
  itob.c
  linkage.c
  lzw.c
  maxval.c
  merge.c
  merge_sort.c
  peof.c
  pointer.c
  quick2.c
  quick.c
  quick_sort.c
  reverse.c
  rftoc.c
  rmultiblank.c
  rtabs.c
  squeeze.c
  structoo.c
  syscall.c
  tempfunc.c
  tfc.c
  word.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