【发布时间】:2016-09-30 15:04:01
【问题描述】:
我正在做一个项目,我有一个二进制数作为变量,我试图将它做成一个数组,这样我就可以遍历索引并测试 0 或 1。我尝试在此处查找其他问题但找不到我要找的东西。现在我已经预定义了数组,所以我可以检查我的 if 语句是否正常工作并且它们可以正常工作。通过参数传入的十进制将被发送到函数 decToBin 以转换为二进制并返回二进制数。我希望发生这样的事情:
binA[size] = decToBin(decimal);
size 变量是二进制数的大小。
void relation (int decimal)
{
int size = ((floor(log2(decimal)))+ 1);
//char binA[size];
int binA[] = {1,1,0,0,1,0,0};
if (size > 1)
{
for( int i = 1; i < (size - 1) ; i++)
{
if (binA[i] == 0)
printf("Father's ");
if (binA[i] == 1)
printf("Mother's ");
}//end for
for(int i = (size -1); i < size; i++)
{
if (binA[i] == 0)
printf("Father ");
if (binA[i] == 1)
printf("Mother ");
}//end for
}//end if
else
printf("Self");
printf("\n");
} //end relation
评论: 二进制数的类型为 int。 我做第二个循环的原因是最后一个词没有“'s”。 以下是二进制数为 1010 的输出示例: 父亲的母亲的父亲。 当二进制数的大小为 1 时打印 Self。 这是我的 decToBin 函数的代码
int decToBin (int decimal)
{
int rem = 0; //sets remainder to 0
int binary = 0; //sets answer to 0
int x = 1; //sets x to 1
while(decimal != 0)
{
rem = decimal % 2; //lets remainder = whatever is left after diving by 2
decimal = decimal / 2; //lets input = input divided by 2
binary = binary + (rem * x); //answer = answer + the remainder times x
x = x * 10; //x now = itself times 10 for the next loop
} //end while
//printf("Ahnentafel number in binary: %d\n", binary);
return binary;
} //end decToBin
【问题讨论】:
-
什么是“二进制数”?这是什么类型的变量?
-
在
for( int i = 1; i < (size - 1) ; i++)中,您为什么从数组索引1开始,并以与数组大小无关的大小结束? -
在二进制数字计算机上,每个变量都是“二进制变量”。你不能把变量放在某个地方。但是您可以将其值分配给另一个变量。
-
确实不需要所有这些,您可以直接使用例如检查整数变量的位。
(decimal & (1 << i)) != 0其中i是要检查的位的索引(当然是从0 开始)。如果设置了该位,则此表达式将为 1。