http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48418
Summary: Bit shift operator >>= Product: gcc Version: 4.5.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c AssignedTo: unassig...@gcc.gnu.org ReportedBy: lis...@lisp2d.net int x=1000; x>>=(sizeof(int)<<3); x is still 1000 In some cases bit shift operator used with variable (not constant) and compiler didnot show warning. My opinion is that result must be 0. Remarked code in my program and code to see what's happened. /* ULong::ULong(ULInt const&x):value2(){ if(x.uli){ if(sizeof(unsigned int)==sizeof(unsigned long int)){ value2.push_back(static_cast<unsigned int>(x.uli)); return;} UInt const ibs(sizeof(unsigned int)<<3); ULInt x2(x); do{ value2.push_back(static_cast<unsigned int>(x2.uli)); (x2.uli)>>=(ibs.ui); }while(x2.uli);}} */ #include <iostream> typedef struct{unsigned int i;}si; int main(void){ unsigned int x=1000; si w; w.i=sizeof(unsigned int)<<3; std::cout<<"x="<<x<<std::endl; x>>=w.i; std::cout<<"x>>=w.i -> x="<<x<<std::endl; x>>=(sizeof(unsigned int)<<3); std::cout<<"x>>=(sizeof(unsigned int)<<3) -> x="<<x<<std::endl; x>>=32; std::cout<<"x>>=32 -> x="<<x<<std::endl; }