【发布时间】:2022-11-03 01:42:24
【问题描述】:
我正在学习使用 C 进行位操作。在编写将二进制转换为十进制的程序时遇到了一个问题,尤其是在程序的 for 循环中。以下是我的代码:
unsigned int binary_to_uint(const char *b)
{
unsigned int result = 0;
int i, len;
if (!b)
return (0);
len = strlen(b);
for (i = 0; i < len; i++)
{
if (b[i] == '1')
{
result += 2 << (i-1); /*where my issue is*/
}
else if (b[i] == '0')
continue;
else
return (0);
}
return (9);
}
我尝试调试,我意识到我的问题源于如果陈述
因此,我对如果* 陈述:
int main() {
// Write C code here
int i = 0;
printf("result of 2 << (%d - 1): %d\n", 2 << (i - 1));
printf("result of 2 << (0 - 1): %d", 2 << (0 - 1));
return 0;
}
在第一个 printf 中,显示2 << (0 - 1) 的结果:0在控制台中,而 在第二个 printf 中,显示2 << (0 - 1) 的结果:1在控制台中。 我的期望是两个 printf 应该显示完全相同的东西,即2 << -1 是 1,然而事实并非如此。有人可以帮我了解发生了什么。为什么使用变量 i 将移位运算符的结果更改为 0?
【问题讨论】:
-
printf("result of 2 << (%d - 1): %d\n", 2 << (i - 1));有两个格式说明符,但只有一个参数。
标签: c bit-manipulation