text: c++.chat - Bitshift question
  - %u <motocross95 hotmail.com> Aug 23 2008
  - %u <motocross95 hotmail.com> Aug 23 2008
  Here is some sample code and I'll explain the problem after. #include <stdio.h> #include <iostream> using namespace std; void print(int data){ for (int i = 31; i >= 0; i--){ cout<<(bool)(data & (1<<i)); } cout<<endl; } int main(){ int test = 1<<31; print(test); print(test>>9); return 0; } Ok first it creates a 32 bit int with it's leftmost bit set to one. Then it prints it to show the user. Next it prints the same variable after a right bitshift of 9. The problem is this..... 1000>>2 = 1110 when it should be 0010 as long as the leftmost bit isn't set it's fine however. 0100>>2 = 0001 I'm using Visual C++ 2008 Express. Anyone have any ideas as to what's going on? It's pretty important I figure this out. Thanks in advance.
  Aug 23 2008
  Ok it's me again. I just wanted to let everyone know that I figured out the problem. I just had to switch the data types to unsigned ints. Not exactly sure why. I know if you left shift it's like multiplying by 2 so it might need to set that if I was going too large but by right shifting the number is being divided by two. Basically I'm not sure why but I managed to fix it and figured I'd post the fix just in case someone else was in the same boat as me.
  Aug 23 2008