c 语言中逻辑运算符使用方法,C语言的逻辑运算符的使用
逻辑运算符使用分析
&&和||
1、程序中的短路
短路规则
||从左向右开始计算当遇到为真的条件时停止计算整个表达式为真所有条件为假时表达式才为假。
&&从左向右开始计算当遇到为假的条件时停止计算整个表达式为假所有条件为真时表达式才为真
2、三目运算法
a
返回的是变量的值而不是变量c++在这里进行了改进返回的是这个的引用。
*(a
五位运算
C语言号称高级语言为什么支持位运算
在嵌入式开发中会经常与外部链接串口和并口很需要位运算的
1、按位与2&3010&011=010
2、按位或2|3010|011=011
3、按位异或2^3010^011=011
有结合律和交换律
4、左移和右移注意点
左移运算符<
规则高位丢弃低位补0
5、右移运算符>>把运算数的二进制位右移
规则高位补符号位地位丢弃
6、防错准则
避免位运算符逻辑运算符和数学运算符同时出现在一个表达式中
当位运算符逻辑运算符和数学运算符需要同时参与运算时尽量使用括号()来表达计算次
序
位移的大小不能大于输的长度且不能为负的
7、Tips
左移n位相当于乘以2的n次方但效率比数学运算符高
右移n位相当于除以2的n次方但效率比数学运算符高
8、交换变量的三种方式
#defineSWAP1(a,b)\
{\
inttemp=a;\
a=b;\
b=temp;\
}
#defineSWAP2(a,b)\
{\
a=a+b;\
b=a-b;\
a=a-b;\
}//比第一种少用了一个变量,当a和b很大的时候会溢出
#defineSWAP3(a,b)\
{\
a=a^b;\
b=a^b;\
a=a^b;\
}//效率最高但只适合整形(a^a)^b=b
试题有一个数列其中的自然数都是以偶数的形式出现只有一个自然数出现的次数为奇数次。编写程序找出这个自然数。
方法一将数列排序排序后去读取一旦奇数个就跳出
方法二用空间换时间先找到最大的数n然后申请n个空间,把数组清零
然后用循环for(...)b[a[i]]++;最后遍历数组的大小一但是奇数就返回。
方法三用按位异或不断的消除最后只剩下一个就是要的答案
#include
Intmain()
{
Inta={1,1,1,2,3,4,5,6,5,6,4,3,2};
Inti=0;
Intfind=0;
For(i=0;i
Find=find^a[i];
Printf(“%d\n”,find;
Return0;
}