//-----------------------------------------------------------------------------
// bitshift_demo.c
//
// some small code snips
// demonstrationg how to use bitshifting
//
// group: group 1,13 study assistant AltiHar
//
// author: Altinger Harald 0630xxx
//
// last change: created all (Altinger Harald)
//-----------------------------------------------------------------------------
//

#include <stdio.h>

//----------------------------------------------------------------------------- 
/// 
/// main function to controll the program flow
///
/// print message and scan input
/// 
/// @return int  always zero 
// 

int main()
{
  int a_number = 123;  //0b00000000 00000000 00000000 01111011
  int b_number = 0123; //0b00000000 00000000 00000000 01010011
  unsigned int c_number = 0xFFFFFFFF; //0b11111111 11111111 11111111 11111111
  unsigned int d_number = 3; //0b11
  unsigned int e_number = 0; //0b0
  char a_char = 'a';
  char b_char = 'b';
  
  printf("------------output------------\n");
  printf("a_number = %d\n",a_number);
  printf("b_number = %o\n",b_number);
  
  printf("---different representation---\n");
  printf("%o\n",a_number); //output as octal
  printf("%x\n",a_number); //output as hexa  
  
  printf("----------bitshifting---------\n");
  printf("a_number << 2         = %d\n",a_number << 2);
  printf("a_number >> 2         = %d\n",a_number >> 2);
  
  printf("(a_number >> 2 ) << 2 = %i\n",(a_number >> 2) << 2);
  printf("(a_number << 2 ) >> 2 = %i\n",(a_number << 2) >> 2);
  
  //remember how an integer is represented within the memory
  printf("max shift left:  %u\n",a_number << 31);
  printf("max shift right: %u\n",a_number >> 31);
  
  printf("---------bit operations-------\n");
  printf("c_number AND d_number = %d\n",d_number & e_number); //11 & 00 = 00!
  printf("c_number OR d_number  = %d\n",d_number | e_number);  //11 | 00 = 11!

  printf("------------numbers-----------\n");
  printf("c_number = %i\n",c_number);
  printf("c_number = %u\n",c_number);
  
  printf("-------------chars------------\n");
  printf("a_char          = %c\n",a_char);
  printf("a_char          = %u\n",a_char);
  printf("a_char          = %x\n",a_char);  
  printf("a_char << 2     = %c\n",a_char << 2);
  printf("a_char << 2     = %d\n",a_char << 2);
  printf("a_char >> 2     = %c\n",a_char >> 2);
  printf("a_char >> 2     = %d\n",a_char >> 2);
  printf("b_char          = %c\n",b_char);
  printf("a_char & b_char = %c\n",a_char & b_char);
  printf("a_char & b_char = %d\n",a_char & b_char);
  printf("a_char | b_char = %c\n",a_char | b_char);
  printf("a_char | b_char = %d\n",a_char | b_char);
  
  return 0;
}

