相关疑难解决方法(0)

是>,<,!,&&,||的"真实"结果 或==定义?

例如,当我7>1用C语言写入时(如果这不是一直是特征,则说是C99),我可以期望结果恰好是1还是只有一些非零值?这适用于所有bool运营商吗?

c logical-operators

19
推荐指数
3
解决办法
2131
查看次数

正在使用'!!' 在C/C++中的良好实践并且它很常见吗?

可能重复:
C++代码中的双重否定

据我所知,没有C/C++书籍教程或手册提到这种技术.也许是因为它只是一个小小的东西,不值得一提.

我使用它是因为C/C++将bool类型与int,long,pointer,double等混合在一起.需要将非bool转换为bool是很常见的.使用(bool)值来做这件事是不安全的,所以我习惯!!这样做.

例:

bool bValue = !!otherValue;
Run Code Online (Sandbox Code Playgroud)

c c++

8
推荐指数
3
解决办法
580
查看次数

双布尔否定运算符

我从Microsoft的GSL实现(C++指南支持库)中看到了这段代码:

#if defined(__clang__) || defined(__GNUC__)
#define GSL_LIKELY(x) __builtin_expect(!!(x), 1)
#define GSL_UNLIKELY(x) __builtin_expect(!!(x), 0)
#else
#define GSL_LIKELY(x) (!!(x))
#define GSL_UNLIKELY(x) (!!(x))
#endif
Run Code Online (Sandbox Code Playgroud)

我读到了__builtin_expect(这里这里),但我仍然不清楚双boolean否定运算符的目的是什么(!!(x)).为什么用它?

有问题的文件就是这个.

c c++ macros negation

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

C语言中双重否定的作用是什么

我对编译器对此的“想法”有争议:

a = 8;
b = !!a;
Run Code Online (Sandbox Code Playgroud)

那么,是b == 0x01?总是TRUE或者0x01可能是,0xFF等等?0xFFFF0xFFFFFFFF

如果我只想提取这种0x00双重(a == 0)否定 方法0x01是否(a > 0)有效?

换句话说:要获得结果只有 0 或 1,使用什么更好?

a) a>0?1:0; b) !!a

我希望你能理解我的问题。

c

4
推荐指数
2
解决办法
7062
查看次数

需要帮助理解这个逻辑表达式!! i +!j

可能重复:
C中的双重否定:是否保证返回0/1?

int main(void)
{
  int i = 2, j = 1;

  printf("%d", !!i +!j);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

据我了解,!! 将表达式转换为bool,所以它是说因为我不等于2,所以值为0 + j,不等于1,值为0,并且因为0等于false,所以它读取:false + false = true代表值1.请帮助我是C编程的新手.

c

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

标签 统计

c ×5

c++ ×2

logical-operators ×1

macros ×1

negation ×1