在我的编程课上,我们不允许使用 || && 和 !对于这个任务。如果不使用!,你怎么能做一个“不”的声明?另外,如何做 && 会很有用,但我想我可以弄清楚。
(我们可以使用 % / * pow abs ln + -)
回答确切的问题:使用标准宏not
等and
。只是不要忘记#include <iso646.h>
!a
等价于1-a
,前提a
是保证只取值 0 或 1。
if (!x) { }
是相同的
if (x==0) { }
(!x) 等价于 (x?0:1) 或 (x==0)
超级简单的方法,
If(x == y) {
//Don't do something
}
Else{
//do something
}
视情况而定,例如:
if(a != b){
//do stuff
}
可以改写为:
if(a == b){} else {
//do stuff
}
怎么样
1-(abs(abs(a+1) - abs(a-1))/2)
解释:
int not(int a){
int b = abs(a+1) - abs(a-1);
//b is either -2, 0 or 2 depending on whether a was <0, ==0 or >0.
int c = abs(b) / 2;
//c is either 0 or 1 depending on whether b was zero or non-zero
return 1-c;
//return 1 if a is 0 or 0 if a is 1
}
!(variable % 4)
可以写成"\1\0\0"[abs(variable%4)]
。
对于变量的任何整数值,变量 % 4 只能产生整数值 {-3, -2, -1, 0, 1, 2, 3}。
由于只有 7 个可能的值,我们可以使用结果查找表。
的结果 !这些值是:
为了避免不得不处理负索引,我们将abs结果,所以我们只看到0-3。
表示此查找表的一种简单方法是使用文字字符串:“\1\0\0”。我们对值使用八进制转义序列。0 处的值是 1,1 处的值是 0,等等。C 字符串有一个隐含的 0 (NUL) 作为最终字符,并且由于我们需要的最后一个值是 0,所以我没有明确包含它。
如果不能使用方括号,也可以这样写:*("\1\0\0" + abs(variable%4))