将int转换为二进制。我不明白这个功能是如何工作的

时间:2017-06-02 03:06:10

标签: c

void int_to_bin_digit(int in, int count, int* out)
{
   int mask = 1U << (count-1);       // LINE 1
   int i;
   for (i = 0; i < count; i++) 
   {
       out[i] = (in & mask) ? 1 : 0; // LINE 3 (I don't understand it )
       in <<= 1;                     // LINE 2
   }
}

我需要一个将int转换为二进制的函数。我不知道如何自己创建一个,因为我从未使用过bit运算符。我在这里找到了这个它完成它的工作。

假设我们称这个函数为int_to_bin_digit(67,8,out)

我知道第1行给掩码值128(1000 0000)而第2行使67(0100 0011)变为这样(不确定这个)

i=0  (0100 0011) 
-----------
i=1  (1000 0110) 
i=2  (0000 1100)  
i=3  (0001 1000)
i=4  (0011 0000) 
i=5  (0110 0000)
i=6  (1100 0000)
i=7  (1000 0000) (loop stops here )

(0000 0000) (so we never get to this one I guess)

第3行只比较第一个1,如果是== 1,则返回1,如果是,则返回0!= 1?它是如何工作的?

编辑:https://davidzych.com/converting-an-int-to-a-binary-string-in-c/阅读本文后。我看到我们只比较中的前1个与内部掩码中的前1个 我不明白为什么它不会只返回每个例子中的1,因为两个数字都是!= 0.是什么让程序只比较第一位?

1 个答案:

答案 0 :(得分:1)

是的,你的假设几乎可以。

LINE 1 count - 至少位的掩码。 LINE 3 测试in号码中是否设置了此位。术语&代表&#34;按位和&#34;,其中&#34;和&#34;对比特进行操作,当两个操作数等于1时,仅等于1,并且&#34;按位&#34;意味着它被应用于操作数的各个位对。然后 LINE 2 继续将in的所有位移到左边,使第n位成为先前的(n-1)位。

但总而言之,考虑阅读有关按位操作的教程,这将使您作为C程序员的生活变得更加容易。