C语言中的逻辑运算符和位运算符总结
更新时间:2024-01-11 11:50:01 阅读量: 教育文库 文档下载
一、逻辑运算符:
包括:1。&&逻辑与 2。||逻辑或 3。!逻辑非
逻辑运算符用于对包含关系运算符的表达式进行合并或取非
对于使用逻辑运算符的表达式,返回0表示“假”,返回1表示“真”。关于逻辑运算符的解释
请注意:任何使用两个字符做符号的运算符,两字符之间不应有空格,即将==写成= =是错误的。
假设一个程序在同时满足条件a<10和b==7时,必须执行某些操作。应使用关系运算符和逻辑运算符“与”来写这个
条件的代码。用&&表示“与”运算符,该条件代码如下: (a<10) && (b==7);
类似地,“或”是用于检查两个条件中是否有一个为真的运算符。它由两个连续的管道符号(||)表示。如果上例
改为:如果任一语句为真,则程序需执行某些操作,则条件代码如下: (a<10) || (b==7);
第三个逻辑运算符“非”用一个感叹号(!)表示。这个运算符对表达式的真值取反。例如,如果变量s小于10,程序
程序需执行某些操作,则条件代码如下: (s<10) 或
(!(s>=10)) //s不大于等于10
关系运算符和逻辑运算符的优先级一般都低于算术运算符。例如,5>4+3的计算与5>(4+3)运算符是一样的,即
先计算4+3,再执行关系运算。此表达示的结果为“假”,即,将返回0。 下面的语句
printf(\ 将输出 0
可以总结为:&&的结果是真真为真。||的结果是假假为假。 与 A&&B 只有A B都为真才是真 或 A||B 只有A B都为假才是假 非 ~A A为真时,此式为假 二、位运算符:
包括:1。&位与符 2。|位或符 3。^位异或符 4。~位取反符
以操作数12为例。位运算符将数字12视为1100。位运算符将操作数视为位而不是数值。数值
可以是任意进制的:十进制、八进制或十六进制。位运算符则将操作数转化为二进制,并相应地返回1或0。
位运算符将数字视为二进制值,并按位进行相应运算,运算完成后再重新转
换为数字。例如:
表达式10&15表示(1010 & 1111),它将返回表示1010的值10。因为真真得真,或者是11得1,同位全是1结果也是1
表达式10|15表示(1010 | 1111),它将返回表示1111的值15。假假得假。全零得零。
表达式10^15表示(1010 ^ 1111), 它将返回表示0101的值5。此时是同性相斥,相同的就为假。
表达式~10表示(~1010),它将返回表示0101的值 -11。此号好理解,按位取反
1.C语言中逻辑运算符(&&,||,!)和位运算符号(&,
|,^)的区别
在C语言中,编程者经常混淆两组运算符:(&&,||,!)和(&,|,^)。第一组是逻辑运算符,它的操作数是布尔型,而第二组则是位运算符,其操作数是位序列。在布尔型操作数中,只有两个数值,0或1。C语言规定,在逻辑运算中,所有的非0数值都看做1处理。而位序列则可以是有无符号的字符型,整型,长短整型等。在位运算中,是相应的位之间进行逻辑运算。因此,从逻辑上讲,位运算过程包含多个逻辑运算过程。通常,位运算操作数选择无符号型数据。
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;
/* Logic operation */
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);
/* Bit operation */
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
1.2.长度问题
在上面的使用案例中,读者应该很容易明白执行的结果,但是,有没有考虑到执行结果的长度呢?下面是一个打印不同情况下表达式结果的长度的程序。
#include
int main(int argc, char *argvs[]) {
unsigned int a = 0; unsigned short b = 0; unsigned char c = 0;
printf(\sizeof(unsigned int), sizeof(unsigned short), sizeof(unsigned char));
printf(\
printf(\ printf(\ printf(\ printf(\ printf(\ printf(\ printf(\ printf(\ printf(\ printf(\ printf(\
printf(\ printf(\ printf(\ printf(\ printf(\
printf(\
printf(\ printf(\ printf(\ printf(\ printf(\ printf(\
}
在LINUX下面用GCC得到的结果是:
int size = 4 short size = 2 char size = 1 a&b 4 a&c 4 b&c 4 2&c 4 2&b 4 2&a 4
return 0;
1&c 4 1&b 4 1&a 4 0&c 4 0&b 4 0&a 4 a&&b 4 a&&c 4 b&&c 4 2&&c 4 2&&b 4 2&&a 4 1&&c 4 1&&b 4 1&&a 4 0&&c 4 0&&b 4 0&&a 4
而在WINDOWS下面用VC得到的结果确是:
int size = 4 short size = 2 char size = 1 a&b 4 a&c 4 b&c 4 2&c 4 2&b 4 2&a 4 1&c 4 1&b 4 1&a 4 0&c 4 0&b 4 0&a 4 a&&b 1 a&&c 1 b&&c 1
2&&c 1 2&&b 1 2&&a 1 1&&c 1 1&&b 1 1&&a 1 0&&c 4 0&&b 4 0&&a 4
从两种结果中我们很清晰的得出一个结论,逻辑运算结果的长度是由编译器决定的。因此在使用到逻辑运算结果的时候,要首先判断其长度。
1.3.使用问题
这里的使用问题就是操作符使用的混淆,下面有一个简单的例子。 if((a > b) && (c > d)) { printf(“true/n”); } else {
printf(“false/n”); }
在这种情况下,如果将&&误写为&,结果会如何呢。如果仔细分析会发现,执行结果依然正确。但是,这种情况很特殊,1)是&&被换成了&,而不是||被换成|;2)a>b和c>d的值要么是1,要么是0;3)当1和0进行&&或&操作时,结果相同(1或0)。因此,在这种情况下,是一种“侥幸”!
正在阅读:
C语言中的逻辑运算符和位运算符总结01-11
2022年东北财经大学区域经济学801经济学之西方经济学(微观部分)04-14
2009-2010学年 第1学期 期末考试试卷及解答07-29
CopAdd400科博安全隔离与信息单向导入系统技术白皮书04-09
质量检查与验收制度04-09
转炉汽化烟道爆管分析及预防03-03
瞧我找回了坚持作文800字07-11
白球撞击目标球后的线路图解和斯诺克台球教程及实用方法04-15
中石化集团公司领导职务及排序02-02
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 运算符
- 言中
- 逻辑
- 总结
- 新点2013清单造价江苏版操作视频讲稿
- OA系统指纹统一身份认证服务平台(UIAS Server)解决方案
- 建筑施工工艺流程大全
- 2017版《钢结构设计标准》重大变化1
- 当前就业方式,就业观念变化调查研究
- 遗传学试题
- 数学建模预测股市走向
- 高中语文第二单元4说数练习粤教版必修3-含答案
- 电力系统稳考试试题
- 1号锅炉除灰渣调试措施009
- 七年级地理下册第八章第四节澳大利亚教案4(新版)新人教版
- 第三篇 作业题
- 2011年离退休干部工作总结
- 机械设计专业毕业设计说明书(论文) - 图文
- RDPAC考试第15套
- GSM知识点 - 图文
- 广州市存量房买卖合同示范文本(2017版)
- 景观设计任务书模板 - 图文
- 主斜井大倾角强力皮带运行安全措施
- 大成贺氏族谱2