&和|是位运算。&&和||表示逻辑关系,&&和||表达式最终的值只可能是真(1)或者假(0),而位运算表达式的值不限于0和1 两者在特定情况下的效果是相同的。操作方法如下:
1、首先这里用到字符的ascii码,A的ASCII码为65,之后用scanf函数进行输入。if设置为嵌套语句,判断输入的字符是不是在A-Z之间,系统比较的是二者的ASCII码,来输入大写字母G。
2、还是字母大小写的转换,利用逻辑运算符对第一个程序进行改写。使用逻辑与&&运算符之后,代码更易于理解,而且计算机处理的时候更容易。
3、将letter = letter - ‘A' = 'a'改为了letter += 'a' - 'A',代码可读性提高,开始运行,输入一个【,可以看到,非字母字符的输出达到了解决。
4、接下来要用五个新函数去完成这个程序,isalpha(),这个函数用来测试字符是否为字母,是返回true,isupper()和islower()用来测试字母是大写还是小写,最后两个函数toupper和tolower分别是用来将字符转换为大写和小写。
5、运行输入G,就完成了。
在C语言中,编程者经常混淆两组运算符:(&&,||,!)和(&,|,^)。第一组是逻辑运算符,它的操作数是布尔型,而第二组则是位运算符,其操作数是位序列。在布尔型操作数中,只有两个数值,0或1。C语言规定,在逻辑运算中,所有的非0数值都看做1处理。而位序列则可以是有无符号的字符型,整型,长短整型等。在位运算中,是相应的位之间进行逻辑运算。因此,从逻辑上讲,位运算过程包含多个逻辑运算过程。通常,位运算操作数选择无符号型数据。
1 应用实例
#include
int main(int argc, char *argvs[])
{
unsigned int a = 0x11;
unsigned int b = 0x00;
unsigned short s = 0x10;
unsigned char c = 0x01;
if(a&&b) printf(“True: a && b is %d \n”, a&&b);
else printf(“False: a && b is %d \n”, a&&b);
if(a&&s) printf(“True: a && s is %d \n”, a&&s);
else printf(“False: a && s is %d \n”, a&&s);
if(a&&c) printf(“True: a && c is %d \n”, a&&c);
else printf(“False: a && c is %d \n”, a&&c);
if(s&&c) printf(“True: s && c is %d \n”, s&&c);
else printf(“False: s && c is %d \n”, s&&c);
printf(“a & b is %x \n”, a&b);
printf(“a & s is %x \n”, a&s);
printf(“a & c is %x \n”, a&c);
printf(“s & c is %x \n”, s&c);
printf(“a & 0x110 is %x \n”, a&0x110);
return 0;
}
执行结果是:
False: a && b is 0
True: a && s is 1
True: a && c is 1
True: s && c is 1
a & b is 0
a & s is 10
a & c is 1
s & c is 0
a & 0x110 is 10
同理 | 是按位取或,a|b=0xfc(11111100b)意思就是每组二进制位相应地做或运算。
&&和||就是判断逻辑的与和或,比如(a==b)&&(c==d)意思就是,a等于b,并且c等于d时表达式为真,逻辑上的
&和|是位运算;&&和||表示逻辑关系
&&和||表达式最终的值只可能是真(1)或者假(0)
而位运算表达式的值不限于0和1
两者在特定情况下的效果是相同的,但是不建议这么做,会让人产生困惑
&& || 是逻辑判断,并且和或者的意思,一般操作在表达式逻辑上的,如:
if ( a&& b ) 表示 a为真且b为真
c= a&b ; //进行运算,得到一个新的结果