使用位运算符将十进制转换为二进制
Decimal to binary using Bitwise operator
#include <stdio.h>
int main()
{
int decimal_num, c, result;
printf("Enter an integer in decimal number system\n");
scanf("%d", &decimal_num);
for (c = 31; c >= 0; c--)
{
result = decimal_num >> c;
if (result & 1)
printf("1");
else
printf("0");
}
printf("\n");
return 0;
}
此代码采用十进制数并使用按位运算符将其转换为二进制数。我很难理解 for 循环 result = decimal_num >> c
内的逻辑以及它为什么从 for (c = 31; c >= 0; c--)
开始迭代。我了解按位 AND、OR、XOR 和 NOT 的基础知识,并且我知道当奇数与“1”进行“与”运算时,结果为“1”,否则为“0”(因为所有几率的最低有效位为 1)。
代码解释如下:
程序从左开始扫描十进制数字的按位表示以写入,处理每一位。十进制数字应该有 32 位,因此 for 循环运行 32 次。
第一次,c的值为31。
假设decimal_num最初的位表示是
x................................ ( . 代表任意数字 )
decimal_num >> 31 将所有位向右移动 31 次,这样第一位就移到最右端。结果是 0000000000000000000000000000x。请注意,当数字移位时,0 会被添加到左端。
然后检查结果以查看它是 0 还是 1,并相应地打印。
0000000000000000000000000000x & 00000000000000000000000000001 = 1 如果 x 是一
0000000000000000000000000000x & 00000000000000000000000000001 = 0 如果 x 为零。
继续,检查 c 为 30 时的第二位。:
.Y......................
decimal_num >> 30 个结果
000000000000000000000000000000.Y
000000000000000000000000000.Y & 00000000000000000000000000001 = 1 如果 Y 为一
000000000000000000000000000.Y & 00000000000000000000000000001 = 0 如果 Y 为零。
我们继续打印结果直到最后一位。
希望这能帮助你理解。
#include <stdio.h>
int main()
{
int decimal_num, c, result;
printf("Enter an integer in decimal number system\n");
scanf("%d", &decimal_num);
for (c = 31; c >= 0; c--)
{
result = decimal_num >> c;
if (result & 1)
printf("1");
else
printf("0");
}
printf("\n");
return 0;
}
此代码采用十进制数并使用按位运算符将其转换为二进制数。我很难理解 for 循环 result = decimal_num >> c
内的逻辑以及它为什么从 for (c = 31; c >= 0; c--)
开始迭代。我了解按位 AND、OR、XOR 和 NOT 的基础知识,并且我知道当奇数与“1”进行“与”运算时,结果为“1”,否则为“0”(因为所有几率的最低有效位为 1)。
代码解释如下:
程序从左开始扫描十进制数字的按位表示以写入,处理每一位。十进制数字应该有 32 位,因此 for 循环运行 32 次。
第一次,c的值为31。
假设decimal_num最初的位表示是 x................................ ( . 代表任意数字 )
decimal_num >> 31 将所有位向右移动 31 次,这样第一位就移到最右端。结果是 0000000000000000000000000000x。请注意,当数字移位时,0 会被添加到左端。
然后检查结果以查看它是 0 还是 1,并相应地打印。 0000000000000000000000000000x & 00000000000000000000000000001 = 1 如果 x 是一 0000000000000000000000000000x & 00000000000000000000000000001 = 0 如果 x 为零。
继续,检查 c 为 30 时的第二位。:
.Y......................
decimal_num >> 30 个结果 000000000000000000000000000000.Y
000000000000000000000000000.Y & 00000000000000000000000000001 = 1 如果 Y 为一 000000000000000000000000000.Y & 00000000000000000000000000001 = 0 如果 Y 为零。
我们继续打印结果直到最后一位。
希望这能帮助你理解。