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.是什么让程序只比较第一位?
答案 0 :(得分:1)
是的,你的假设几乎可以。
LINE 1 是count
- 至少位的掩码。 LINE 3 测试in
号码中是否设置了此位。术语&
代表&#34;按位和&#34;,其中&#34;和&#34;对比特进行操作,当两个操作数等于1时,仅等于1,并且&#34;按位&#34;意味着它被应用于操作数的各个位对。然后 LINE 2 继续将in
的所有位移到左边,使第n位成为先前的(n-1)位。
但总而言之,考虑阅读有关按位操作的教程,这将使您作为C程序员的生活变得更加容易。