赞
踩
目录
完成算术运算操作:加( + )、减( - )、乘( * )、除( / )、取余( % )
比较运算,结果有两个值 成立为真:1,不成立为假:0
==(等于运算符)、!=(不等于运算符)、>(大于运算符)、>=(大于或等于运算符)、<=(小于或等于运算符)
- 进行比较运算,若 运算结果成立 为真,则结果值为 1,若结果为假,则结果值为0
-
- a == b :判断 a 和 b 是否相等,相等则为真,结果值为 1
- a != b :判断 a 和 b 是否不相等,不相等则为真,结果值为 1
- a > b :判断 a 是否 大于 b,如果大于则为真,结果值为1
- a < b
- a >= b
- a <= b
注意:浮点数如何判断两个数是否相等
1、浮点数不是精确的类型,无法使用 == != 来判断是否相等
2、需要转换为 >= 和
3、当两个浮点数在精度范围内相等,认为浮点数相等(float类型 +- 1e-6,double类型 +- 1e-15)
- float a,b;
-
- a - b >= -0.000001 并且 a - b <= 0.000001
- 满足则相等
- 格式:
- 注意 逻辑运算中,条件只看真假,在条件中把值 非0 为真, 0 为 假
- 条件1 && 条件2
- 判断条件1 和2 均为真,结果为真,值为 1
- 若有一个条件为假,则结果为假,值为 0
-
-
- 通常 逻辑与 用于判断多个条件是否是同时成立
-
- 注意: 若 条件1 不成立,逻辑与运算 之后的条件不会执行 ,整个 逻辑与 一定为假
- 格式:
- 条件1 || 条件2
- 条件1 或者 2 有一个为真,结果为真
- 条件1 和 2 均为假,则结果为假
-
- 逻辑或:用于判断多个条件中是否有成立的情况
-
-
- 注意: 若 条件1 成立,逻辑或运算之后的条件不会执行,整个 逻辑或 一定成立
- 格式:
- ! 条件
-
- 若条件为真,则逻辑非运算结果为假
- 若条件为假,则结果为真
练习
- int n = 1, m=2; m>1 && n+1>2
- int n = 1, m=2; m>1 && (n=n+1)>2
- int n = 1, m=2; m>1 || (n=n+1)>2
- int x = 3, y=4, z=5; (x+y)+z-1 && y+z/2 的结果
- int x = 3, y=4, z=5; (x+y)+z-1 || y+z/2 的结果
结果
- 0
- 0
- 1
- 1
- 1
- 格式:
- 条件 ? 表达式1 : 表达式2
- 如果 条件为真 , 则执行 表达式1,同时把表达式1的结果 作为 整个三目运算符的结果
- 如果 条件为假 , 则执行 表达式2,同时把表达式2的结果 作为 整个三目运算符的结果
- //三目运算符
- #include<stdio.h>
-
- int main(int argc,char *argv [])
- {
- int a=10,b=20;
- int c=a>b?a:b;
- printf("%d\n",c);
- return 0;
- }
把数据的使用、运算按照二进制的形式进行处理,不考虑是否为整数、字符等,直接操作数据的位
数据的二进制存储
- & : 位与 运算符
- | : 位或 运算符
- ~ : 位取反 运算符
- ^ : 位异或 运算符
- << :左移 运算符
- >> :右移 运算符
- 把两个数据中的每一位都进行 与运算
- 格式:
- a & b ,与: 同为 1,则为1, 若有0,则为0
-
- 5 & 9
- 0000 0101
- & 0000 1001
- --------------
- 0000 0001
- 使用与运算,位 与 1,不变,与 0,则为 0
- 使用与运算来清除某些位
- 比如:把x 数中的第7bit 清除为0
- x = 0xab
- 1010 1011
- & 0111 1111
- -------------
- 0010 1011

- 把两个数据中的每一位都进行 或运算
- 格式:
- a | b ,与: 有1 ,为 1, 都为0,则为0
-
- 5 | 9
- 0000 0101
- | 0000 1001
- --------------
- 0000 1101
-
- 使用或运算,位 或 1,为1 ,或 0,不变
- 使用或运算来置位为1
- 比如:把x 数中的第4bit 置为1,其他不变
- x = 0xab
- 1010 1011
- | 0001 0000
- -------------
- 1011 1011

- 把两个数据中的每一位都进行 异或运算
- 格式:
- a ^ b ,异或: 相同为0,不同为1
-
- 5 ^ 9
- 0000 0101
- ^ 0000 1001
- --------------
- 0000 1100
-
- 使用异或运算,位 异或 1,取反 ,异或 0,不变
- 使用异或运算进行对位取反
- 比如:把x 数中的第4bit 取反,其他不变
- x = 0xab
- 1010 1011
- ^ 0001 0000
- -------------
- 1011 1011

- 对一个数中的每一位都进行取反
- 格式:
- ~a ,取反,对数据中的每一位都进行取反,0变为1,1变为0
- ~5
- ~ 0000 0101
- -------------
- 1111 1010
- 把一个数的二进制整体向左移动指定位数,低位补0,高位溢出
- 格式:
- x << n ,把x 向 左移动 n位
-
- 5 << 3 : 0000 0101 << 3 ====> 0 0101 000 == 40
- 12 << 1 :0000 1100 << 1 ====> 000 1100 0 == 24
-
- 在有效数据位没有溢出的情况下。左移1bit,相当于乘以 2
-
- 192 << 1 : 1100 0000 << 1=====>100 0000 0 == 128
- 把一个数的二进制整体向右移动指定位数,低位溢出
- 正数:高位补0
- 负数:高位补1
- 格式:
- x >> n ,把x 整体向右移动n位
-
- -64
- 原码:1100 0000
- 补码:1100 0000
- -64 >> 2
- 1100 0000 >> 2=====> 11 1100 00 ===> -16
-
- 64
- 原码:0100 0000
- 补码:0100 0000
- 64 >> 2
- 0100 0000 >> 2 =====> 00 0100 00 ===> 16
-
- 在有效位没有溢出的情况下,右移1bit,相当于除以2

- ++ 、 --
-
- 变量++ : 先把变量的值作为 自增运算的结果,然后 把变量 +1(变量 = 变量+1)
- 先用,再加
- ++变量 : 先把变量 +1(变量 = 变量+1),然后再把更新后的变量值作为 自增运算的结果
- 先加,再用
连接多个表达式,每个表达式 用 逗号隔开,从第一个表达式开始,一直运算到 最后一个表达式为止,把最后一个表达式的值作为 整个逗号运算符表达式的结果
通常使用逗号运算时,都需要加上()
- //有一个变量,unsigned char c
- //写出第六位置1
- //写出第六位清0
- //写出第六位取反
- #include <stdio.h>
- int main(int argc, const char *argv[])
- {
- unsigned char c=67;
- int a;
- a= 1<<6 | c ;
- printf("%u\n",a);
- a=~(1<<6) & c ;
- printf("%u\n",a);
- if((1<<6 | c)==c)
- {
- a=(~(1<<6)&c);
- printf("%u\n",a);
- }
- else if((1<<6 | c)!=c)
- {
- a=1<<6|c;
- printf("%u\n",a);
- }
-
- return 0;
- }

- //用位运算和算数运算,实现两个数的交换
- #include <stdio.h>
- int main(int argc, const char *argv[])
- {
- int a,b;
- printf("请输入两个数:");
- scanf("%d%d",&a,&b);
- printf("输入的数:a=%d,b=%d\n",a,b);
- //第一种方法,用算数运算
- a=a+b;
- b=a-b;
- a=a-b;
- printf("a=%d,b=%d\n",a,b);
- //第二种方法
- a=a^b;
- b=b^a;
- a=a^b;
- printf("a=%d,b=%d\n",a,b);
- return 0;
- }

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。