关系运算符和逻辑运算符

请问 char *name = “FishC” 和 char name[] = {‘F’, ‘i’, ‘s’, ‘h’, ‘C’} 是否等价?

答:两者并非等价。char *name = “FishC” 应该与 char name[] = {‘F’, ‘i’, ‘s’, ‘h’, ‘C’, ‘\0’} 等价。没想到我又考你这个吧?


1. 请解释为何下边变量 a 的值为何打印出来是 144(请写出分析过程)?

#include <stdio.h>

int main()
{
        unsigned char a, b, c;

        b = c = 200;
        a = b + c;

        printf("a = %u\n", a);

        return 0;
}                   %u以无符号十进制输出

答:嘿嘿,还是前边的知识点,就怕你给忘了,巩固巩固(下边小括号内的数表示进制)~=|Q`R200(10) == 128(10) + 64(10) + 8(10) == 1000 0000(2) + 100 0000(2) + 1000(2) == 1100 1000(2)Z->ox`E9A
T'"UC2$+}?~gnw^P5XOx
1100 1000(2) + 1100 1000(2) == 1 1001 0000(2)`W1u .f
G)6%|ks>`*b7PSFIXMHO&me{
由于 char 类型占一个字节(8 位),因此舍弃掉最前边的进位,结果为 1001 0000(2) == 144

 请将语句 a = b = c = 3; 拆分成 3 条独立语句。

答:务必注意结合性,赋值运算符的结合性是自右向左的。yz|G5
FOv*}agj89B|:X[(x;IA]2 m^u
c = 3;来自:
b = c;Powered by 
a = b;

你听说过“表达式”,也听说过“语句”,那请问两者的区别是什么?

答:一个表达式会产生一个值,它可以放在任何需要一个值的地方;而语句是一段可执行代码,可以理解为一个行为,语句不一定有值。Ep;vO
>s.0KCr<2*+|]$S_{:Te
(这道题出的有点坑你,因为课堂上我没有明确讲解到两者的差别,但因为发现很多就算不是初学者的朋友被问到时也是哑口无言,所以这里通过这道题给大家科普下。不谢!

下边代码中的表达式 a = 0 && 1 = b 编译会出错,你知道为什么吗?

#include <stdio.h>

int main()
{
        int a = 1, b = 2;

        a = 0 && 1 = b;

        return 0;
}

答:这个错误与本节课【知识点备忘】的“彩蛋”中提到的 Bug 有异曲同工之妙,由于小甲鱼少打了一个等号(=),使得表达式先计算逻辑运算符的值为 0 && 1 结果为假(0),便出现了 0 = b 这样错误的赋值语句(我们无法给一个常数赋值,不是吗?)>Xuj!
K[FfL':2&s{8O,kBtcTRd~}N
正确的表达式应该是这样的:a == 0 && 1 == b;

下边有一段代码,请描述表达式 a < b && c < d 的求值顺序(先求什么、再求什么、最后求什么)

#include <stdio.h>

int main()
{
        int a = 0, b = 1, c = 2, d = 3;

        a > b && c < d;

        return 0;
}

答:先求关系表达式 a > b 的值,由于结果为假,根据短路求值的原则,直接得到逻辑表达式 a > b && c < d 的值为假(因为 && 需要两边同时为真,结果才为真,所以左边为假,右边则没有必要继续判断,这就是短路求值的原理)。

 请用小括号和数字序号体现表达式中运算符的优先顺序,并口算出表达式的值(下边假设变量 a、b、c、d 的值分别是 1、2、3、4) <)U&c~%x3
zMY7._giB+ "w[8k)m(OV:Up
比如:a + b * c - d版权属于
写成:(a + (b * c)1)2 – dsV[T;oC
求值:(1 + (2 * 3)) – 4 == 3EHR>T
;b["g)uxcTGRL%JB&F,3+oerY4
A. a + b && c / d来自
B. a = b && c - d来自
C. 'a' + 'b' <= 'c' || a / b + d % cmyst:{g+VB
D. !!a + !b + c – a – cA6okje#
E. a = b - c || a % b && c / d kZ'Yy+&x
pzBIVl3`b4C1"Ghe^YRo0a~Md&
答:
A. a + b && c / dR%2V1
写成:(a + b)1 && (c / d)2&|i"}4.p%>
求值:(1 + 2) && (3 / 4) == 3 && 0 == 0]9jyMN_"n#
Rgmcv Mru9)^&lESL+Cpan=@s
B. a = b && c - d版权属于:
写成:a = (b && (c – d)1)2jN<1]"
求值:a = (2 && (3 - 4)) == a = (2 && -1) == a = 1O1sek[h(7
%SawjQr2hCHYXG*7fzT< ')1}+
C. 'a' + 'b' <= 'c' || a / b + d % c:VD;zIU|P_
写成:(('a' + 'b')1 <= 'c')2 || ((a / b)3 + (d % c)4)5{>YuKXv4
求值:((97 + 98) <= 99) || ((1 / 2) + (4 % 3)) == (195 <= 99) || (0 + 1) == 1a)_Wt>~
9`2y[W<RHLF+}C)~{:^pl0
D. !!a + !b + c – a - c{_j'mK6TG
写成:((((!(!a)1)2 + (!b)3)4 + c)5 – a)6 – c<#!TpHsj
求值:((((!(!1)) + (!2)) + 3) – 1) – 3 == ((((!(0)) + (!2)) + 3) – 1) – 3 == ((((1) + (0)) + 3) – 1) – 3 == … == 1 + 3 – 1 -3 == 0"^rH9C7I!n
<|!g$ .08T>CuUq~]e&3)zmRc?2@
E. a = b - c || a % b && c / d ^MmNeRuh5
写成:a = ((b – c)4 || ((a % b)1 && (c / d)2)3)5vVWlqF
求值:a = ((b - c) || (1 && 0)) == a = (3 - 4) || 0 == a = (-1 || 0) == a = 1

请说明逻辑与(&&)在下边表达式中起到的重要作用(这道题很经典,不要轻易看答案(⊙o⊙)哦 

count != 0 && sum/count

答:该表达式使用逻辑与(&&)来确保 sum/count 的除数不为 0。qCFYx5+
DB;yAz1HEl$-}e%srbXR>*ZIaP
因为当 count 为 0 时,并不会导致 sum/0,因为根据短路求值的原则,&& 运算符在左侧为假的情况下,并不会计算右侧的表达式。(这个技巧放在实际开发中,逼格顿时嗷嗷的 

请用一个逻辑表达式来判断某一年是否为闰年。

某一年份如果符合下边 A 或 B 其中一个,我们称之为闰年:
A. 能被 4 整除,但不能被 100 整除;
B. 能被 400 整除。

答:(year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)

解析:|| 左边为 A 条件,右边为 B 条件,符合其中一个,逻辑表达式即为真

@g

#S+f2<r

z

  • 14
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

倦504

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值