#include<stdio.h> //当两个数相加和大于int类型时,存在溢出,此方法就不能使用 intmain() { int a = 10; int b = 20; 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); return0; }
输出
1 2
交换前 a = 10 b = 20 交换后 a = 20 b = 10
方法二
1 2 3 4 5 6 7 8 9 10 11
#include<stdio.h> intmain() { //此方法只适用两个整数之间交换 int a = 10; int b = 20; 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); return0; }
输出
1 2
交换前 a = 10 b = 20 交换前 a = 20 b = 10
四、赋值运算符 =
将赋值运算符右侧的值赋给左侧的变量
1 2 3 4 5 6 7 8 9 10
#include <stdio.h》 intmain() { int a = 20; a = 30; //使用赋值运算符将30赋给变量i int x = 1; int y; int z; z = y = x+1; //连续赋值 等同于 y = x+1; z=y; return0; }
复合赋值运算符: += -= *= /= %= >>= <<= &= |= ^=
等同于将复合赋值运算符左侧的变量与右侧的值通过运算符计算得到的结果赋值给左侧变量
1 2 3 4 5 6 7
#include<stdio.h> intmain(){ int i = 10; i += 30 ; // 等同于 i = i + 30; printf("%d\n",i); return0; }
输出
1
40
五、单目运算符
5.1 逻辑非运算符 !
在c语言中,0为假,非0为真。 逻辑非运算符逆转逻辑状态, !真 -> 假 !假 ->真
1 2 3 4 5 6 7 8
#include<stdio.h> intmain() { int i = 10; int j = 0; printf("!i = %d\n",!i); printf("!j = %d\n", !j); return0; }
输出
1 2
!i = 0 !j = 1
1 2 3 4 5 6 7
#include<stdio.h> intmain() { int i = 0; if (!i) //当i为假时候输出哈哈哈 printf("哈哈哈\n"); return0; }
输出
1
哈哈哈
5.2 取地址运算符 & 与 间接寻址运算符 *
&变量名 : 取出变量在内存的地址 * 指针变量 :访问指针变量存储的地址所对应内存空间
1 2 3 4 5 6 7 8
#include<stdio.h> intmain() { int i = 10; int* p = &i;//取出i在内存中地址并存储在指针变量p中,这里 * 代表指针类型 *p = 20; //通过指针p间接访问变量i的内存空间,并修改i的值为20,这里* 代表间接寻址访问,即找到指针存储的地址对应的空间 printf("i = %d\n", i); return0; }
输出
1
20
5.3 sizeof 运算符
sizeof是运算符而不是一个函数,求变量(类型)所占内存空间大小,单位为字节
1 2 3 4 5 6 7 8
#include<stdio.h> intmain() { int i = 10; printf("i所占空间大小为:%d\n", sizeof(i)); printf("int类型所占空间大小为:%d\n", sizeof(int)); printf("i所占空间大小为:%d\n", sizeof i); //这里 sizeof 求i的大小没有使用(),可以说明sizeof不是一个函数 return0; }
#include<stdio.h> intmain() { int i = 1; int j = 2; int z = i++ || j++; //i是后置++,此时i为1,左侧表达式为真,则右边表达式不会执行 printf("i = %d j = %d z = %d\n", i, j, z); return0; }
输出
1
i = 2 j = 2 z = 1
八、条件运算符(三目运算符)
语法: 条件 ? X : Y 当条件为真时,值为X,否则为Y
1 2 3 4 5 6 7 8
#include<stdio.h> intmain() { int x = 10; int y = 20; int max = x > y ? x : y; printf("x与y的较大值为:%d\n", max); return0; }
#include<stdio.h> intmain() { int i = 10; int x = (10, i++,30);//括号内多个表达式从左到右依次执行,但最终结果只跟最后一个表达式有关,即 x = 30 printf("%d\n",i); printf("%d\n", x); return0; }