C 语言之运算符

来源:互联网 发布:king网址软件 编辑:程序博客网 时间:2024/05/21 09:29

1.运算符

a+b  ——》表达式
a,b ——》操作数
+/- ——》运算符

   1.1算数运算符

+ - * / %(取余)
注意:
  (1)%要求操作数必须是整数 5%2 =1
(2)0不能做除数,当然也不能对0取余

(3)如果两个数相除,那么结果取整数部分

1.2 赋值运算符

int num;
  num = 1;“=”就是赋值运算符
(1)简单赋值
int i,j;
i = j = 100;//从右向左赋值
int i;float f;f = (i = 3.14);程序中不要使用,结果不可预知

(2)  复合赋值
将变量经过一系列运算之后再赋值给本身
int num;
num = num + 5 ; <=>  num += 5;
+=  -= *= /= %=...........
注意:
不要交换两个运算符的位置
=+  ——> 错误的

1.3   自增/自减运算符

++  --
int num = 5;
num = num +1 ;<=>num += 1;<=>num++;<=> ++num;
num = num -1; <=> num -= 1; <=>num--;<=> --num;
如果++/--出现在具有多种运算的表达式中时:
    前++ ——>++num 表示先进行++运算,再参与其他运算
    后++ ——>num++ 表示先进行其他运算,再进行++运算

注意:(1)不要在同一个表达式中对同一个变量进行多次自增/自减运算,否则结果不可预知
例子:int num = 11;
     num++ + ++num = 24,尽量不要这么使用

         (2)++ / -- 也可用于浮点数,很少使用;表示整数部分+1

1.4关系运算符

< <= > >=
特殊表达式:
int num = 10;
0 < num <100;这个结果永远为真,因为0 <num 结果无论是真还是假,都比100小,以后程序尽量不要这样子写

应写为

 0 < num && num < 100

1.5 判等运算符

    ==是否相等
    !=是否不相等
例子:int num = 10;
if( num == 10)
注意:程序中不要省略等号,

经验:程序中尽量这样使用if(10 == num),因为漏掉等号,编译器会报错

1.6逻辑运算符

&&  逻辑与
||  逻辑或
!   逻辑非


运算规则:表达式1 && 表达式2  结果

综上所述:(1)对于逻辑与来说,只有两个都为真结果才为真,否则为假
(2)对于逻辑或来说,只要有一个为真,则结果 为真,否则结果为假
(3)对于逻辑非来说,真为假,假为真


注意:短路特性:

(1)表达式1 && 表达式2

如果表达式1 为假,就不会执行表达式2

(2)表达式1 || 表达式2

如果表达式1为真,就不会执行表达式2

 1.7位运算符

注意:位运算符只能对整型数据(包括字符型)进行位运算
&   按位与,按照二进制位进行与运算(只有两个都为1,结果才为1)
例子:3 & 5
         3:0000  0011
         5:0000  0101  &
----------------------------------------------
            0000  0001

应用:判断一个数的奇偶性,以及判断某个数的任一位二进制位 为0 还是为 1


|    按位或,(只要与一个为1,结果就为1)
例子:3 | 5
         3:0000  0011
         5:0000  0101  |
----------------------------------------------
            0000  0111

~    按位取反
例子:~3
         ~3:0000  0011
----------------------------------
                1111   1100

^   按位异或(相同为0,否则为1)
例子:3 ^ 5
         3:0000  0011
         5:0000  0101 ^
----------------------------------------------
            0000  0110

(1)与0 相异或 ,保留原来的值
(2)与自身 相异或,全部清零

应用:
不借助第三变量,交换两个整数的值


综上所述:(1)对于按位与来说,只要两个都为1结果才为1,否则为0
(2)对于按位或来说,只要有一个为1结果为1,否则为0
(3)对于按位取反来说,1 为 0,0 为 1,对于 n 按位取反得到的数是:-(n+1)
(4)对于按位异或来说,相同为 0,不同为 1;

位逻辑运算小结:清零取数要用与某位置一可用或
若要取反和交换 轻轻松松用异或


应用:
(1)判断一个指定的数最后1位二进制位是0还是1
方法1:判断奇数还是偶数

方法2:&1:0000 0001    如果结果为0,说明这个数最后1位的二进制位为0,否则为1

(2)判断从右向左倒数第二位的二进制位是 0 还是 1
—》& 2:0000 0010   如果结果为0,说明那个数据的二进制位为0,否则为1
规律    (1)&用于判断指定的二进制位是0还是1
           (2)&还可以用于将指定的二进制位置为0
           (3)| 可以用于将指定的二进制位置为 1;

1.8 移位运算符

<<  左移,将二进制位向左移动,右边的空位补0
>>  右移,将二进制位向右移动,左边的空位补符号位

注意:右移n位时,左边空出来的n位都填充的是符号位
无符号数:3<<1 ->6
3<< 2 ->12
3<< 3 ->24  =>3 << n位,相当于3* 2^n
32 >> 1 ->16
32 >> 2 ->8
32 >> 3 ->4 =>32 >> n位,相当于32 / 2^n
负数:-5:1111  1011
-5<<1   ->1111  1101 ->-3
综上所述:

num  >> n位,表示 num / 2^n

 num << n位,表示 num * 2^n


1.9运算符  & 和 *

& 标识符名 ——》取出标识符所对应的地址,使用%p输出地址
*地址 ——》取出地址上存储的数据
* 和 & 实际上是互逆的运算

1.10三目运算符

表达式1?表达式2:表达式3
如果表达式1为真,则执行表达式2,跳过表达式3
如果表达式1为假,则跳过表达式2,执行表达式3

三目运算符的嵌套:
表达式1?表达式2:(表达式3?表达式4:表达式5)
表达式1?(表达式2?表达式3:表达式4):表达式5

原创粉丝点击