相关疑难解决方法(0)

在C中使用布尔值

C没有任何内置布尔类型.在C中使用它们的最佳方法是什么?

c boolean

659
推荐指数
10
解决办法
127万
查看次数

为什么0为真,但shell中的false为1?

false; echo $?
Run Code Online (Sandbox Code Playgroud)

以上将输出1,这与我所知道的所有其他编程语言相矛盾.

这有什么理由吗?

shell boolean

106
推荐指数
8
解决办法
6万
查看次数

在C中使用true和false

据我所知,有三种方法可以在c中使用布尔值

  1. 用bool类型,从那时候使用true和false
  2. 使用预处理器定义 #define FALSE 0 ... #define TRUE !(FALSE)
  3. 只是直接使用常量,即1和0

我错过了其他方法吗?不同方法的优缺点是什么?

我想最快的是3号,2号更容易读取(尽管按位否定会略微增加开销),1是最易读的,与所有编译器不兼容.

c coding-style

59
推荐指数
5
解决办法
14万
查看次数

N&(1 << x)=何时为真?

我最近一直在研究使用位操作生成子集的完整搜索,所以我偶然发现了以下代码:

for(int b = 0; b < (1<<n); b++) {
    vector<int> subset;
    for(int i = 0; i < n; i++) {
        if( b&(1<<i)) subset.push_back(i);
    }
    //use subset here
}
Run Code Online (Sandbox Code Playgroud)

此代码用于查找一组n元素的所有子集.我对这部分感到困惑

b&(1<<i)
Run Code Online (Sandbox Code Playgroud)

这是如果的第i位明显是假b0,但我不明白为什么它会是 true如果的第i位btrue,我的意思是不会结果只是2给力i(这因为它不等于一个即真,应该返回false)?

变化:在那旁边,我现在发现,我知道,任何数量从零不同的考虑true,那N & (1<<x) == true如果是真的x0N是奇数,或x>0N均匀,由于偏好==&,所以N & (1<<x) == true解析 …

c++ bit-manipulation c++11

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

标签 统计

boolean ×2

c ×2

bit-manipulation ×1

c++ ×1

c++11 ×1

coding-style ×1

shell ×1