十进制转二进制错误输出
Decimal to binary wrong output
我正在尝试使用这两种方法打印二进制数字:
方法一:
int input;
scanf("%d", &input);
for(int i = sizeof(int)*CHAR_BIT - 1; i >= 0; i--)
printf("%u",(input & (1<<i)) >> i);
方法二:
int input;
scanf("%d", &input);
for(int i = sizeof(int)*CHAR_BIT - 1; i >= 0; i--)
(input & (1<<i)) ? putchar('1') : putchar('0');
方法 2 工作正常,但在方法 1 中,打印的第一个 "digit" 是 4294967295,我找不到错误。
使用无符号类型并注意 i>=0 比较。因为无符号类型总是 >=0。不能为负。
unsigned int input;
scanf("%u", &input);
for(unsigned int i = sizeof(int)*8 - 1; ; i--) {
printf("%u",(input & (1u<<i)) >> i);
if ( i==0 ) break ;
}
printf("\n") ;
使用有符号数进行位移没有意义。当您将数据移入 int
的符号位时,您会调用未定义的行为。还要注意 1
文字的类型是 int
.
通过使用无符号类型解决这个问题,同时摆脱原始的 C 类型,支持 stdint.h。
uint32_t input = 0x88776655;
for(uint32_t i=0; i<32; i++)
{
printf("%u", (input & (1u<<31-i)) >> 31-i);
}
通过在使用位之前转换为无符号类型来解决此问题。
printf("%u", ((unsigned int)input & (1 << i)) >> i);
我正在尝试使用这两种方法打印二进制数字:
方法一:
int input;
scanf("%d", &input);
for(int i = sizeof(int)*CHAR_BIT - 1; i >= 0; i--)
printf("%u",(input & (1<<i)) >> i);
方法二:
int input;
scanf("%d", &input);
for(int i = sizeof(int)*CHAR_BIT - 1; i >= 0; i--)
(input & (1<<i)) ? putchar('1') : putchar('0');
方法 2 工作正常,但在方法 1 中,打印的第一个 "digit" 是 4294967295,我找不到错误。
使用无符号类型并注意 i>=0 比较。因为无符号类型总是 >=0。不能为负。
unsigned int input;
scanf("%u", &input);
for(unsigned int i = sizeof(int)*8 - 1; ; i--) {
printf("%u",(input & (1u<<i)) >> i);
if ( i==0 ) break ;
}
printf("\n") ;
使用有符号数进行位移没有意义。当您将数据移入 int
的符号位时,您会调用未定义的行为。还要注意 1
文字的类型是 int
.
通过使用无符号类型解决这个问题,同时摆脱原始的 C 类型,支持 stdint.h。
uint32_t input = 0x88776655;
for(uint32_t i=0; i<32; i++)
{
printf("%u", (input & (1u<<31-i)) >> 31-i);
}
通过在使用位之前转换为无符号类型来解决此问题。
printf("%u", ((unsigned int)input & (1 << i)) >> i);