1.1 理解掌握运算符
(1) 赋值运算符:
a. 单等号: = (从右往左)
double salary = 3200.0; //double类型的变量salary,且3200.0赋值给salary
b. 复合运算符: 如:%=、&= 、^= 、|=
num %= 5; // %=
num += 12; // +=
//求模且赋值运算符,求两个操作数的模赋值给左边操作数
//C %= A 相当于 C = C % A
C &= 2; // 按位与且赋值,C = C & 2
C ^= 2; // 按位异或且赋值运算符,C = C ^ 2
C |= 2 ; // 按位或且赋值运算符 ,C = C | 2
(2) 算术运算符:
a. 一元运算符:++、–
a.1 num++与++num 如果单独是语句,则两者等价
a.2 num1 = num++; //等价
//num1 = num;
//num ++;
b. 二元运算符:+、-、*、/、%
num = num1 + num2;
(3) 关系运算符:可以比较大小、高低、长短
<、>
>=、<=
==(恒等)、!=(不等)
printf("%d\n",8==9);
printf("5 > 8吗?%d\n",5>8);
printf("6 < 7吗?%d\n",6<7);
运算结果
0
5 > 8吗?0
6 < 7吗?1
(4) 逻辑运算符:
&& 并且 条件1 && 条件2
|| 或 条件1 || 条件2
! !条件
//逻辑运算符 && || !
printf("%d\n",5 > 9 && 4 < 7);
(5) 位运算符: &、|、~、^、
<<(左移,右侧空位补0)、
>>(右移,左侧空位补符号位)
>>>(无符号右移,左侧空位补0)
假设如果 A = 60,且 B = 13,现在以二进制格式表示,它们如下所示:
A = 0011 1100
B = 0000 1101
A&B = 0000 1100
A|B = 0011 1101
A^B = 0011 0001
~A = 1100 0011
unsigned int a=60; //0011 1100
unsigned int b=13; //0000 1101
printf("a=%d,b=%d",a,b); //输出a,b的值
printf("\n");
a=a^b; //a=a^b=0011 0001
b=a^b; //b=a^b=0011 1100
a=a^b; //a=a^b=0000 1101
printf("a=%d,b=%d",a,b); //输出a,b的值
运算结果:
a=60,b=13
a=13,b=60
(6) sizeof运算符: 可以获得某一数据类型占用字节数
形式:sizeof(type name)
结果以字节为单位
//sizeof
printf("所占的空间%d字节!\n",sizeof(long long));
printf("所占的空间%d字节!\n",sizeof(34.4));
printf("所占的空间%d字节!\n",sizeof(34.4f));
运算结果:
所占的空间8字节!
所占的空间8字节!
所占的空间4字节!
(7) 条件运算符:三目运算用于条件求值,对第一个表达式作真/假检测,然后根据结果返回两外两个表达式中的一个。
<表达式1>?<表达式2>:<表达式3>
在运算中,首先对第一个表达式进行检验,如果为真,则返回表达式2的值;如果为假,则返回表达式3的值。
int a,b = 12;
a = (b > 0) ? b :- b;
printf("a = %d,b = %d",a,b);
运算结果:
a = 12,b = 12
(8) 逗号运算符:多个表达式可以用逗号分开(,) 其中用逗号分开的表达式的值分别结算,但整个表达式的值是最后一个表达式的值。
//逗号运算符
int a1,a2,b = 3,d = 4,a = 1;
//整个表达式的值是最后一个表达式的值
a1 = (++b,a+1);
//三个表达式,这时的三个表达式为a2 = d+3,a--,b+2,(这是因为赋值运算符比逗号运算符优先级高)所以最终a2 = 7。
a2 = d+3,a--,b+2;
printf("a1 = %d,a2 = %d",a1,a2);
运算结果:
a1 = 2,a2 = 7
而且还发现了一个特别好玩的事情,把上面程序做一下修改,初值不变。
a1 = (++b,++a);
a3 = (++b,a++);
printf("a1 = %d,a3 = %d",a1,a2);
运算结果:
a1 = 2,a3 = 1
这也体现出优先级与++特殊性的问题。(自己觉得)a++ 输出 a 的值再自加,缓存 a 自加后的结果,用于下次进行与 a 相关的计算。
//希望读者自行考虑如果是单独一句a3 = (++b,a++);初值不变,则a输出值为多少。
(9) 指针运算符:用于取内容*和用于取地址&。
& 返回变量的地址。 &a; 将给出变量的实际地址。
* 指向一个变量。 *a; 将指向一个变量。
int a = 4;
int* ptr; //指针变量
ptr = &a; // 'ptr' 现在= 'a' 的地址
printf("a 的值是 %d\n", a);
printf("*ptr 是 %d\n", *ptr);
运算结果:
a 的值是 4
*ptr 是 4
(10) 特殊运算符:()、[]、成员(->,.)等。
1.2 运算符优先级
(比较常用几个做比较)
() sizeof ++ –
!
算术运算符
关系运算符
&&
||
赋值运算符
2 表达式
运算符与操作数的组合
int num = 10;
//int result = num++ >11;
int result = num++ > 11 && --num < 20; //短路运算,当与前面的关系已经为假,就不再执行后面的--num
printf("result= %d\tnum = %d\n",result,num);
暂时写到这吧!!!