C 返回0和返回1之间的差异
我的教授发了C 返回0和返回1之间的差异,c,cygwin,C,Cygwin,我的教授发了 int main(int argc, char **argv) { // enter code here printf("Test 1: trying odd(3) AND even(2)...\n"); printf("%d\n", odd(3) && even(2)); printf("Test 2: trying odd(3) OR even(2)...\n"); printf("%d\n", odd(3) || ev
int main(int argc, char **argv)
{
// enter code here
printf("Test 1: trying odd(3) AND even(2)...\n");
printf("%d\n", odd(3) && even(2));
printf("Test 2: trying odd(3) OR even(2)...\n");
printf("%d\n", odd(3) || even(2));
printf("Test 3: trying odd(4) AND even(7)...\n");
printf("%d\n", odd(4) && even(7));
printf("Test 4: trying odd(4) OR even(7)...\n");
printf("%d\n", odd(4) || even(7));
return 0;
}
int odd(int n)
{
printf("in odd!\n");
return n % 2 == 1;
}
int even(int r)
{
printf("in even!\n");
return r % 2 == 0;
}
作为一项作业,询问为什么第2行和第3行只返回奇数!但是1和4以奇数返回!而且是平局!我不确定为什么,因为我不知道Return 1和Return 0命令之间的区别。从我能收集到的信息来看,返回1将始终返回值(在本例中为奇数!),但返回0仅在满足特定条件时才会返回它
另外:代码int length(char*name,int start,double finish)是否以实数形式返回字符中的单词长度
提前感谢任何决定帮助我的人。这被称为“”
…其中,仅当第一个参数不足以确定表达式的值时,才执行或计算第二个参数
因此,您必须了解这两个函数奇数
和偶数
将返回什么:
奇数(3)
和偶数(2)
:奇数(3)
返回1,并检查偶数(2)
的返回值,因此调用偶数()
奇数(3)
或偶数(2)
:奇数(3)
返回1,由于“短路评估”,它不需要检查偶数(2)
,因此不调用偶数()
奇数(4)
和偶数(7)
:奇数(4)
返回0,由于“短路评估”,它不需要检查偶数(7)
,因此不调用偶数()
奇数(4)
或偶数(7)
:奇数(4)
返回0,并检查偶数(7)
的返回值,因此调用偶数()
当计算逻辑表达式时,它会逐个检查条件,并且只要知道整个表达式(不管剩余的表达式是什么),它就会停止计算它们 示例
unsigned char a = 1; // true
unsigned char b = 0; // false
案例1
- 检查
:是a
true
- 检查
:否它不是b
true
Yes
案例2
- 检查
:是a
true
- 检查
:是b
false
Yes
案例3
- 检查
:是a
true
- 检查
?!!!为什么?无需检查b
,因为只有通过检查b
才能知道整个表达式结果,您同意吗李>a
a
并打印Yes
而不检查b
立即将其投影到代码上;) C中的逻辑布尔代数运算符AND和OR(
&&
和|
)以一种称为的优化方式运行
这就是优化的工作原理
想象一下,你为自己想出了一条规则:
只有当某人拥有一只猫
和一只狗
和一条鱼时,你才会和他们约会
现在想象你开始和一个你可能对约会感兴趣的人交谈。他们说:
嗯,我有一只猫,我没有鱼,但我有一只狗
你什么时候不再注意他们说的话了?一旦他们说他们没有鱼,因为一旦他们说了,他们就打破了你的“和”规则。因此,句子的其余部分完全不相关。这是短路和短路
现在,假设您更改了规则:
只有当某人拥有一只猫
或一只狗
或一条鱼时,你才会和他约会
现在想象你开始和一个你可能对约会感兴趣的人交谈。他们说:
嗯,我没有猫,我有鱼,我也没有狗
你什么时候不再注意他们说的话了?一旦他们说他们有一条鱼,因为一旦他们说了,他们就满足了你的“或”规则。因此,句子的其余部分完全不相关。这是短路或短路
短路评估是评估逻辑表达式的性能优化
在您的示例中,如果传递给它的数字是偶数,
偶数()
函数返回true
,如果传递给它的数字是偶数,odd()
函数返回true
。否则,这些函数返回false
。查看每个布尔表达式,并注意必须进行短路计算的时间。返回0;-函数返回0。
返回1;-函数返回1
在本例中,当数字(n)为奇数时,奇数函数返回1,当数字为偶数时返回0。
这是通过“询问”提醒是否被2等分1来完成的
此外,当数字(r)为偶数时,偶数函数返回1,当数字为奇数时返回0。
这是通过“询问”被2等分时的提醒是否为0来实现的
在主函数中,对奇数和偶数函数的返回值的结果执行and(&&)和or逻辑运算
示例:奇数(3)返回1,偶数(2)返回1,然后1&&1等于1(结果)。还有另一种方法可以测试整数类型的偶数值
int IsOdd(int x) { return (x & 1); }
int IsEven(int x) { return !(x & 1); }
如果设置了最低有效位,则该数字为奇数。如果不是的话,那就扯平了。这只是测试那个位。把它扔出去,这样你就可以消除模运算。。。这是另一种选择。这不是对你问题的回答,但我无法评论…正如我们所知,0表示虚假,1表示真实。返回部分告诉编译器函数必须将计算结果返回给调用方模块
if (a && !b) printf("Yes");
if (a || b) printf("Yes");
int IsOdd(int x) { return (x & 1); }
int IsEven(int x) { return !(x & 1); }