谁能解释一下这些 c 运算符

标签 c operators

这些运算符( =& , ~ )的功能是什么,我发现这段代码是作为一个笑话发布的,标题为

"Found in early Unix sources:"

if(rp->p_flag & SSWAP) {
    rp->p_flag =& ~SSWAP;
    aretu(u.u_ssav);
}

编辑: 来源:http://www.bsdlover.cn/study/UnixTree/V6/usr/sys/ken/slp.c.html

最佳答案

~unary bitwise complement ,它翻转整数中的位。

但是,在阅读评论并意识到我读错了您的代码后,我意识到您提供的代码甚至无法在现代 编译器中编译。

感谢@Avi:运算符 =& 的含义与今天的 &= 相同,但这种语法确实早于当前的 C 标准,因此它是真正古老的 UNIX 代码。

今天真正意味着什么

这里的 & 应该充当 address-of 运算符,而不是 bitwise AND 运算符。

int main()
{
    int x = 5;
    int y = 2;
    x =& ~y;
}

编译这段代码会产生:

错误:左值需要作为一元“&”操作数

我真的认为转录有问题,按逻辑应该是&=,而不是相反。

如果实际上是&=,那么就是按位与。

关于谁能解释一下这些 c 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4535395/

相关文章:

c - 我找不到这个段错误

c++ - ptr->hello();/* VERSUS */(*ptr).hello();

F# 将带参数的运算符传递给函数

c++ - 仅为具有 operator/defined 的此类 T 创建模板 <T>

matlab - Matlab 中是否有 splat 运算符(或等效运算符)?

Python-如何将字符串运算符转换回其特殊含义?

c - GetExplicitEntriesFromAcl() Win32 API 函数的对应函数是什么?

c - IF 语句无法检查正确的值

c - 警告 : passing argument 1 of ‘uart1_sendchar’ makes pointer from integer without a cast [enabled by default]

c - 为什么 printf() 在给定 3 的位掩码时打印 21 而不是 11?