关于&&与&的一点思考

这是一个由“&&”和“&”引发的一点点思考


前言

距离上次发博客已经过了亿天,这次的内容主要是关于C/C++中“&&”和“&”的一个关注点,起因是我在某个初学者群中的一位群友发了一个很简单的题,答案也很明显。就在我很自然地想出其他选项的错误之处时,我却发现,可能答案并非如此。


题目

这是一道特别简单的题目,一眼瞄过去很容易确定答案C,A、D选项很明显,C/C++中并没有这种用法 ,问题就出在B选项,一开始我也以为B是错误的,但我突然想到按位与“&”的性质,并且C/C++中,布尔类型的false和true分别于整型中的0和1等效,“&”的规则是“有0为0”,也就是说,当两边都为1,也就是true的时候,表达式为真,所以B选项的表达式是可以满足题意的。我们接下来做验证。

验证

 首先我们需要验证false和true与0和1的等效关系

由结果我们可以看出,“&”确实会在进行运算时将“false"变为“0”,将“true”变为“1”

接下来我们需要验证B选项的表达式是否可以正确判断出大写字母 ,以下是代码和结果

 

#include<stdio.h>
int main()
{
	for (char ch = 6; ch <= 125; ch++)
	{
		if ((ch >= 'A') & (ch <= 'Z'))
			printf("%3d  %c:Yes		", ch, ch);
		else
			printf("%3d  %c:No		", ch, ch);

		if (ch % 5 == 0)
			printf("\n");
	}

	return 0;
}

 

这里由于存在一些不可打印字符,所以有输出错误,但结果很明显,该表达式确实可以判断字符型变量ch是否是 大写字母


总结

在我提出这一问题之后,有群友理所当然的反驳我,并且他提到“& 和&& 完全是两个意思”,但两个不同的运算符与思路当然可以解决同一个问题,也没有规定必须使用哪一种方法。

当然,“&”的方式并没有“&&”的方式直观、好用,在编写时,编译器也会给出警告

我写这篇博客的目的也并不是让大家去使用“&”的方法,我只是想向大家传达一个观念:你认为习以为常和理所当然的,并不一定就是对的。同时也希望提醒大家,不要习惯于用理所当然的观念来判断事物。

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值