相关疑难解决方法(0)

!!(x)在C(特别是Linux内核)中的含义是什么?

我一直在阅读Linux内核(特别是2.6.11).我发现了以下定义:

#define unlikely(x)     __builtin_expect(!!(x), 0)
Run Code Online (Sandbox Code Playgroud)

(来自linux-2.6.11/include/linux/compiler.h:61 lxr链接)

什么!! 完成?为什么不使用(x)?

也可以看看:

c gcc

23
推荐指数
3
解决办法
3676
查看次数

零(!0)编译器的逻辑否定依赖于C吗?

我看到一篇文章提到了!0的结果是依赖于编译器的.结果可以是1或FF或FFFF,依此类推.

至于C99标准6.5.3.3一元算术运算符,

逻辑否定运算符的结果!如果其操作数的值比较不等于0则为0;如果其操作数的值比较等于0则为1.结果的类型为int.表达式!E等价于(0 == E).

它真的是编译器依赖的吗?

c c99 negation

4
推荐指数
1
解决办法
1876
查看次数

C not运算符是否适用于int?

我有

int x = 5;
printf("%d", x); //i get 5... expected

x = !x;
printf("%d", x);// i get 0... hmm 
Run Code Online (Sandbox Code Playgroud)

二进制5是:0101如果我们对每个位应用反转,我们应该得到1010,但!不一定是反相器,它是一个逻辑运算符.为什么我会得到一个0

是这样的原因,在C中,正数被视为真,所以!它会导致0?这个编译器具体吗?

c c++ compiler-construction operators

1
推荐指数
1
解决办法
7693
查看次数

不是C中的整数

#include <stdio.h>
int main()
{
    int i;

    i=1;
    printf("%d ",!i);

    i=5;
    printf("%d ",!i);

    i=0;
    printf("%d\n",!i);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我在C中得到以下输出: 0 0 1

输出背后的逻辑是什么?

c

-4
推荐指数
1
解决办法
169
查看次数

标签 统计

c ×4

c++ ×1

c99 ×1

compiler-construction ×1

gcc ×1

negation ×1

operators ×1