好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

C语言中的逻辑运算符和位运算符总结.docx

6页
  • 卖家[上传人]:鑫**
  • 文档编号:256363835
  • 上传时间:2022-02-19
  • 文档格式:DOCX
  • 文档大小:32.83KB
  • / 6 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • C语言中的逻辑运算符和位运算符总结 一、逻辑运算符: 包括:1逻辑与 2逻辑或 3逻辑非 逻辑运算符用于对包含关系运算符的表达式进展合并或取非 对于运用逻辑运算符的表达式,返回0表示“假”,返回1表示“真”关于逻辑运算符的说明 请留意:任何运用两个字符做符号的运算符,两字符之间不应有空格,即将==写成= =是错误的 假设一个程序在同时满意条件a=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视为1101。

      位运算符将操作数视为位而不是数值数值 可以是随意进制的:十进制、八进制或十六进制位运算符那么将操作数转化为二进制,并相应地返回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.应用实例 #includeint 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 101.2.长度问题 在上面的运用案例中,读者应当很简单明白执行的结果,但是,有没有考虑到执行结果的长度呢?下面是一个打印不怜悯况下表达式结果的长度的程序。

      #includeint 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 4return 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 12&&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)因此,在这种状况下,是一种“幸运”! 本文来源:网络收集与整理,如有侵权,请联系作者删除,谢谢!第6页 共6页第 6 页 共 6 页第 6 页 共 6 页第 6 页 共 6 页第 6 页 共 6 页第 6 页 共 6 页第 6 页 共 6 页第 6 页 共 6 页第 6 页 共 6 页第 6 页 共 6 页第 6 页 共 6 页。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.