rih*_*iha 15 c int boolean toggle
假设我们有一个int与希望之间切换它0,并1在布尔时尚.我想到了以下几种可能性:
int value = 0; // May as well be 1
value = value == 0 ? 1 : 0;
value = (value + 1) % 2;
value = !value; // I was curious if that would do...
Run Code Online (Sandbox Code Playgroud)
!0的1?_Bool(或bool来自stdbool.h)吗?如果没有,有什么区别?编辑:很多有价值的信息很多很好的答案,谢谢!不幸的是,我只能接受一个.
Mic*_*urr 28
value = !value; 直接表达你想要做的事情,它完全符合你想要的定义.
使用该表达式.
来自C99 6.5.3.3/5"一元算术运算符":
逻辑否定运算符的结果!如果其操作数的值比较不等于0则为0;如果其操作数的值比较等于0则为1.结果的类型为int.表达式!E等价于(0 == E).
oua*_*uah 11
第三个似乎有效.为什么?谁决定!0是1?
C标准保证!0的1.
还有其他可能吗?例如按位运算符?
是的,您可以使用异或运算符:
value ^= 1;
顺便说一句,我更喜欢这种方式, value = !value;因为关系和相等运算符可能导致分支,而位运算符通常不会.
value = 1 - value; // toggle from 0 to 1 ... or 1 to 0
// when you know initial value is either 0 or 1
Run Code Online (Sandbox Code Playgroud)