这段代码如何工作?按位C语言

时间:2013-03-24 22:36:50

标签: c

我必须使用我学校提供的代码,但我不了解这个关于轮班的功能,但是我不知道

如果有人可以帮助我。这真的很不错。

谢谢!

4 个答案:

答案 0 :(得分:5)

这太复杂了。在每次迭代中,只需单击一下,就可以更好地移动位模式:

int c ;
for (c = 'e'; c; c>>=1)
{
   kill(pid, (c & 1) ? SIGUSR1 : SIGUSR2);
}

作为一个副作用,这可以避免魔法常数8(应该是CHAR_BIT,恕我直言)

BTW:这段代码不是完全等价,原来总是发出8次kill()调用,这一次会在第七次之后停止(给定CHAR_BIT == 8),所以额外的

kill(pid, SIGUSR2);

需要完成这项工作。

答案 1 :(得分:1)

这是编写c & (1 << charac)的可怕方式。它测试是否设置了charac'th位,然后使用SIGUSR1,否则使用SIGUSR2。

答案 2 :(得分:1)

对于初学者,ASCII中的字符e是十六进制65 =二进制01100101

代码的作用是在每次迭代时将该值向右移一位,当移位后最右边的位为1时,它会触发SIGUSR1,否则触发SIGUSR2。

现在,如果你问我代码的有用效果是什么,我就不知道了。

答案 3 :(得分:0)

c >> charac将位移位右边的charac次数(因此,如果charax为3,则将右移位3次

& 1测试最低位是否设置

? SIGUSr1 : SIGUSR2这使用了前一个测试的结果,如果它的设置,则使用sigusr1,否则使用sigusr2