运算符
运算符含义
- () 小括号:计算,函数,提升优先级
- [] 中括号:数组——长度,下标
#include<stdio.h>
int main()
{
int i;
int arr[10];
for(i=0; i<10; i++)
{
arr[i]=0;
printf("%d\n",i);
return 0;
}
- -> 指向符:结构体成员
- . 点:结构体成员
#include<stdio.h>
struct Student
{
char name[10];
int age;
}
int main()
{
struct Student stu1={"liubei",30};
stu1.age = 45;
return 0;
}
逻辑运算符
- ! 逻辑非:
a=10
! a=0
!! a=1
- && 逻辑与:
(语句1&&语句2)两个都为真,结果才为真
1&&2——1为假,即为假,2不运算
- || 逻辑或:
(语句1||语句2)有一个为真,则结果为真
1||2——1为真,即为真,2不运算
自增运算符
- i++ 前置加加:先赋值后+1
++i 后置加加:先+1后赋值
#include<stdiio.h>
int main()
{
int i = 10;
int j= ++i;
printf("%d, %d\n", i, j);//输出11,11
int i = 10;
int j= i++;
printf("%d, %d\n", i, j);//输出11,10
return 0;
}
自减运算符
- i- - 前置减减:先赋值后-1
- -i 后置减减:先-1后赋值
#include<stdiio.h>
int main()
{
int i = 10;
int j= --i;
printf("%d, %d\n", i, j);//输出9,9
int i = 10;
int j= i--;
printf("%d, %d\n", i, j);//输出9,10
return 0;
}
#include<stdiio.h>
int main()
{
int a = 1;
int b = 0;
int c = 0;
if(a++ && b++ && c++)//只执行a++和b++
{
printf("ture\n");
}
else
{
printf("false\n");
}
printf("%d, %d, %d\n",a,b,c);//false,2,1,0
return 0;
}
#include<stdiio.h>
int main()
{
int a = 1;
int b = 0;
int c = 0;
if(a++ || b++ || c++)//只执行a++
{
printf("ture\n");
}
else
{
printf("false\n");
}
printf("%d, %d, %d\n",a,b,c);//ture,2,0,0
return 0;
}
位运算符
11: 0000 1011
13: 0000 1101
- ~ 按位取反
11 :0000 1011
~11:1111 0100
- & 按位与
相同位都为1才为1,其余都为0
11&13: 0000 1001
- | 按位或
相同位有一个1就为1
11|13: 0000 1111
- ^ 按位异或
相同位不同就为1,否则为0
11^13: 0000 0110
- << 按位左移
11<<1: 000 10110=11 * 21=22
11<<2: 00 101100=11 * 22=44
右边统一补0
- >> 按位右移
左边补符号位(0正1负),无符号补0
11>>1: 00000 101=11/2=5(整数)
11>>1: 000000 10=11/4=2
-1>>1: 1111 1111= -1
255>>1: 0111 1111 = 127
(-1: 0000 0001—1111 1110—1111 1111)
- * 指针运算符
int *p = &a取址
*p =20解引用,间接访问
- 类型转换运算符:(类型标识符int/char…)
#include<stdio.h>
int main()
{
char a = 10;
char b = (char)200;//1100 1000,减1得到补码1100 0111,补码取反0011 1000,即为-56
//char:-128~127,200-256=-56
printf("%d\n",b);//-56
int c = (int)12.4;
printf("%d\n",c);//12
return 0;
}
-
sizeof 长度运算符:取占内存大小运算符(字节)
-
* / % : 乘 除 取余
#include<stdio.h>
int main()
{
float b = 5/2;//2.0
float c = (float)5/2;//5.0/2=2.5
float d = (float)(5/2);//2.0
float e = 5/(float)2;//5/2.0=2.5
printf("%f, %f, %f, %f\n",b,c,d,e);
return 0;
}
- < > <= >= 双目运算符
#include<stdio.h>
int main()
{
int a = 5;
if(10<a<20)//10<5为假=0,0<20为真
{
printf("真\n");//真
}
else
{
printf("假\n");
}
return 0;
}
- = = 等于号
- != 不等号
- ? : 条件运算符,三目运算符
语句1 ? 语句2 : 语句3
如果语句1为真,则执行语句2;如果语句1为假,则执行语句3。
a>b ? a : b——a>b,真返回a,假返回b
- = 赋值运算符
- 复合赋值运算符
+=, a+=10 , a=a+10
-=, *=, /=, %=, &=, ^=, |=, <<=, >>=
- , 逗号运算符,顺序求值运算
次方的表示
1.25*101 = 1.25e1
pow(x,y)=x的y次方,需要头文件#include<math.h>
运算符优先级