1、算数操作符:+ - * / %
int main()
{
int a = 3 / 5;//0
int a = 6 / 5;//1
float a = 6 / 5;//1
float a = 6.0 / 5.0;//1.2
int a = 18 % 5;//%的俩个操作数必须是整数
}
2、移位操作符:<< >>
int main()
{
int a = 2;//00000000000000000000000000000010
int b = a << 1;//b = 4//00000000000000000000000000000100
//a << 1:把a的二进制向左移动一位
int a = 10;//00000000000000000000000000001010
int b = a >> 1;//b = 5//00000000000000000000000000000101
//a >> 1:把a的二进制向右移动一位
}
3、位操作符:&按位与 |按位或 ^按位异或(位==二进制位)(操作数必须为整数)
int main()
{
int a = 3;
int b = 5;
int c = a & b;//1//与:有0为0
//a:00000000000000000000000000000011
//b:00000000000000000000000000000101
//c:00000000000000000000000000000001
int c = a | b;//7//或:有1为1
//a:00000000000000000000000000000011
//b:00000000000000000000000000000101
//c:00000000000000000000000000000111
int c = a ^ b;//6//异或:相同为0,相异为1
//a:00000000000000000000000000000011
//b:00000000000000000000000000000101
//c:00000000000000000000000000000110
}
练习:交换俩个变量,不使用第三个变量
int main()
{
int a = 3;
int b = 5;
printf("a=%d b=%d", &a, &b);
a = a ^ b;
b = a ^ b;
a = a ^ b;
printf("a=%d b=%d", &a, &b);
return 0;
}
练习:求一个整数存储在内存中的二进制中1的个数
int main()
{
int a = 13;
int b = a | (1 << 4);
//00000000000000000000000000001101 a
//00000000000000000000000000010000 (1 << 4)
//00000000000000000000000000011101 b
printf("%d\n", b);
int c = b & ~(1 << 4);
//00000000000000000000000000011101 b
//00000000000000000000000000010000 (1 << 4)
//11111111111111111111111111101111 ~(1 << 4)
//00000000000000000000000000001101 c
printf("%d\n", c);
return 0;
}
4、赋值操作符:= += -= /= &= >>= <<= %= |= ^=
int main()
{
int a = 10;
a = 100;
a += 100;//a = a + 100;
a <<= 3;//a = a << 3;
}
5、单目操作符(只有一个操作数):! - + & sizeof ~ -- ++ * (类型)
(1)、!:逻辑反操作符
int main()
{
int a = 5;
//a为真,打印1
if (a)
{
printf("1\n");
}
//a为假,打印0
if (!a)
{
printf("0\n");
}
return 0;
}
(2)、+/-:正值/负值
(3)、sizeof:求操作数的类型长度(单位是字节)
int main()
{
int a = 10;
char arr[10] = { 0 };
printf("%d\n", sizeof(a));//4 //计算a所占空间的大小,单位是字节
printf("%d\n", sizeof(int));//4
printf("%d\n", sizeof(arr));//10
printf("%d\n", sizeof(char));//1
return 0;
}
int main()
{
short a = 5;
int b = 10;
printf("%d\n", sizeof(a = b + 2));//2 //sizeof括号中的表达式不参与运算
printf("%d\n", a);//5
}
(4)、~:按位取反(对补码按位取反)(求原码补码的反码)
int main()
{
int a = -1;
//10000000000000000000000000000001 原码
//11111111111111111111111111111110 反码
//11111111111111111111111111111111 补码
int b = ~a;
//00000000000000000000000000000000 原码补码的反码
}
(5)、++/--:
int main()
{
int a = 10;
int b = a++;//后置++,先使用,后++
printf("%d\n", a);//11
printf("%d\n", b);//10
int a = 10;
int b = ++a;//前置++,先++,后使用
printf("%d\n", a);//11
printf("%d\n", b);//11
}
(6)、&和*
&:取地址
*:间接访问操作符(解引用操作符)
int main()
{
int a = 10;
printf("%p\n", &a);
int* pa = &a;//pa用来存放地址:pa是一个指针变量
*pa = 20;//解引用操作符(间接访问操作符)
printf("%d\n", a);//20
return 0;
}
(7)、//(类型):强制类型转换
int main()
{
int a = (int)3.14;//强制类型转换,不报错
return 0;
}
(8)、关系操作符:< <= > >= != ==
(9)、逻辑操作符:或|| 且&&
int main()
{
int i = 0, a = 0, b = 2, c = 3, d = 4;
i = a++ && ++b && d++;
printf("a = %d\nb = %d\nc = %d\nd = %d\n", a, b, c, d);//1,2,3,4
//int c = a && b;//当a=0时,确定为假,后面不进行计算
i = a++ || ++b || d++;
printf("a = %d\nb = %d\nc = %d\nd = %d\n", a, b, c, d);//2,2,3,4
//int c = a || b;//当a!=0时,确定为真,后面不进行计算
return 0;
}
(10)、条件操作符(三目操作符):(表达式1)?(表达式2):(表达式3)
int main()
{
int a = 3;
int b = 0;
//if表达形式
if (a > 5)
b = 1;
else
b = -1;
//条件操作符表达
b = (a > 5 ? 1 : -1);//max = (a>b ? a : b)
return 0;
}
(11)、逗号表达式
int main()
{
int a = 3;
int b = 5;
int c = 0;
//逗号表达式:从左向右以依此计算,但整个表达式的结果是最后一个表达式的结果
int d = (c = 5, a = c + 3, b = a - 4, c += 5);
printf("%d\n", d);//10
return 0;
}
(12)、下标引用、函数调用和结构成员
下标引用:[]
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
// 0,1,2,3,4,5,6,7,8,9 下标
printf("%d\n", arr[4]);//5 //打印下标为4的数值
return 0;
}
函数调用:()
int Add(int x, int y)
{
return x + y;
}
int main()
{
int a = 10;
int b = 20;
int ret = Add(a, b);//函数调用操作符:()
return 0;
}
结构成员:. ->
struct Book//创建一个自定义类型 //定义类型:书
{
char name[20];
char id[20];
int price;
};
int main()
{
int num = 10;
struct Book b = { "C语言","123456",55 };
struct Book* pb = &b;
printf("书名:%s\n", (*pb).name);
printf("序号:%s\n", (*pb).id);
printf("定价:%s\d", (*pb).price);
printf("书名:%s\n", pb->name);
printf("序号:%s\n", pb->id);
printf("定价:%s\d", pb->price);
//结构体指针->变量名
printf("书名:%s\n", b.name);
printf("序号:%s\n", b.id);
printf("定价:%s\d", b.price);
//结构体名.变量名
return 0;
}
希望本文对大家有帮助,上文若有不妥之处,欢迎指正
分享决定高度,学习拉开差距