以下のコードは、いくつかの10進数を出力しているときに、一見無限のループになってしまいます。
int main(){
show(0xBADECAFU);
}
void show(unsigned a){
unsigned pos=0;
for(; pos<UINT_MAX; pos++)
printf("%u", (1U<<pos) & a);
}
以下のコードは、実際には16進数のビットを示しています。最初のプログラムが正しく実行されないのに、2番目のプログラムが正しく実行されないのはなぜですか?
int main(){
show(0xBADECAFU);
}
void show(unsigned n){
unsigned pos=31, count=1;
for(; pos!=UINT_MAX; pos--, count++){
printf("%u", n>>pos & 1U);
}