我想写一个C代码来设置内存地址0x3803的第三位(0x4)并清除第七位(0x40),但是我不确定应该使“&”的值(0x4和0x3F), “|”完成操作:

*((char *) 0x3803) = *((char *) 0x3803) | 0x4;
*((char *) 0x3803) = *((char *) 0x3803) & 0x3F;

我只想向我的值(value)观保证,它的权利或这些值(value)观可能还有其他选择

最佳答案

为了清楚一点,您需要使用补码值AND,即0x40的反转,即0xBF。您可以让编译器使用~为您计算值。

请注意,您可以为此使用&=|=:

*((char *) 0x3803) |= 0x04;
*((char *) 0x3803) &= ~0x40;

10-01 22:50