c语言里&&,c语言 amp_c语言&替换&&,|替换||

最佳答案

能运行,因为运算有效;

但是结果不同吧?

if(c>31||b==4&&c>30) ……

//即 if((c>31)||((b==4)&&(c>30)));

//系统最终会判断或运算||的真假;

if(c>31|b==4&c>30)……

//即 if(((c>31)|b)==(4&(c>30)));

//系统最终会判断==左右两边是否匹配;

明显或运算||的判定范围要远大于==的真假判定,

运行结果不会一样、程序也完全是两种效果。追答:

&和|是位移运算,&&和||是逻辑运算,不同运算方法;具体的运算次序参见我加的()。

追问:

……printf("输入年、月、日:\n");A:scanf("%d%d%d",&a,&b,&c);if(b>12||c>31||(b==4||b==6||b==9||b==1)&&c>30){printf("日期输入错误,重新输入:\n");goto A;}……把&&和||改成&和|之后,输入错误日期都会返回,运行结果还是和原先一样。

追答:

因为你的判断基数都是0和1(),&&和&的效果一样的,除非1&&1或者1&1否则都等于0;||和|的效果也是一样,除非0||0或者0&0否则都等于1;所以基于1和0的按位与、或,和逻辑与、或是等效的。你的判断式先用>、

追答:

关于提问:为什么c语言里把if(c>31||b==4&&c>30)改成if(c>31|b==4&c>30)仍然能正常运行?正确的解答是:因为先有“”和“==”将基值局限在0或1,所以将“||”和“&&”改为“|”和“&”仍能正常运行。

最佳答案由网友  jariii  提供

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值