C移零或按零移位
我正在学习程序C移零或按零移位,c,bit-shift,C,Bit Shift,我正在学习程序AVR uCs 示例代码段包含以下行: DDRC |= (0 << 0) | (0 << 1); // PIN C0, C1 as input for buttons DDRC |=(0代码不起任何作用,可能是错误的 作者的意思可能是 DDRC |= (1 << 0) | (1 << 1); 它读取DDRC,设置最底部的两位,然后写回该值。使用移位零的语法没有多大作用。它们的意思是1@JanDvorak:有时,在写入硬件时,移位零
AVR uCs
示例代码段包含以下行:
DDRC |= (0 << 0) | (0 << 1); // PIN C0, C1 as input for buttons
DDRC |=(0代码不起任何作用,可能是错误的
作者的意思可能是
DDRC |= (1 << 0) | (1 << 1);
它读取DDRC,设置最底部的两位,然后写回该值。使用移位零的语法没有多大作用。它们的意思是1@JanDvorak:有时,在写入硬件时,移位零是为了明确地清除位,并使修改代码以设置位更容易。@Skizz本身,或ing零不能清除位。事实上,只有在前面有一行DDRC=0;
时,这条语句才有意义。@JanDvorak:Hmmm,也许我用错了词。我不应该说“清除”,而应该说“不设置”。过去在编写低级硬件接口代码时,我看到宏设置为允许代码likehardware_reg=(如果您想将这两位设置为零,则代码上的RHS可能完全正确。移位的RHS通常命名为常量,有点像(1不,因为位与前一个值一起被或运算。是的,但我们没有前面的代码,它可能是int DDRC=0;
或设置其他位的结果。确实如此,但我强烈怀疑这是一个硬件寄存器。@Skizz您的第一个评论有点误导,这行没有清除任何位,除非有更多的代码看不见?这没有多大意义。它不会设置位,当然这与清除位不是一回事。
DDRC |= (1 << 0) | (1 << 1);
DDRC |= 3;
DDRC &= ~( (1 << 0) | (1 << 1) );