C语言中的操作符

算术操作符

+ - * / %

1.除了%操作符,其他操作符都可以作用于整数和浮点数。
2.%操作符的两个操作数必须都是整数。
3. / 操作符作用于整数,则执行整数除法,只要其中一个数是浮点数就执行浮点数除法。

//int main()
//{
//	int a = 10;
//	int b = 20;
//	printf("%d %d %d %d\n", a + b, a - b, a*b, a / b);
//	double c = 10.0 / 20;
//	printf("%lf\n", c);
//	system("pause");
//	return 0;
//
//}

移位操作符

<<左移

1.将整数的32位二进制数整体向左移,左边丢失,右边补0
2.在计算机中操作的都是二进制数的补码

//int main()
//{
//	int a = 5;
//	//0000000000000000000000000000000101
//	int a1 = -5;
//	//1000000000000000000000000000000101--源码
//	//1111111111111111111111111111111010--反码
//	//1111111111111111111111111111111011--补码
//	int b = a << 1;
//	//0000000000000000000000000000001010
//	//b=10;
//	int c = a1 << 1;
//	//1111111111111111111111111111110110--c的补码
//	//1000000000000000000000000000001001--c的补码的反码
//	//1000000000000000000000000000001010--c的源码
//	//c=-10;
//	printf("%d \n", b);
//	printf("%d \n", c);
//	system("pause");
//	return 0;
//}

>> 右移

将整数的32位二进制数整体向右移,右边丢失,左边补符号位

//int main()
//{
//	int a = 5;
//	//0000000000000000000000000000000101
//	int a1 = -5;
//	//1000000000000000000000000000000101--源码
//	//1111111111111111111111111111111010--反码
//	//1111111111111111111111111111111011-补码
//	int b = a >> 1;
//	//0000000000000000000000000000000010
//	//b=2
//	int c = a1 >> 1;
//	//1111111111111111111111111111111101--c的补码
//	//1000000000000000000000000000000010--c的源码的反码
//	//1000000000000000000000000000000011--c的源码
//	//c=-3;
//	printf("%d \n", b);
//	printf("%d \n", c);
//	system("pause");
//	return 0;
//}

位操作符

& 按位与

| 按位或

^ 按位异或

操作的数必须是整数

//int main()
//{
//	int a = 5;
//	//00000000000000000000000000000101
//	int b = 6;
//	//00000000000000000000000000000110
//	int c = a & b;
//	//00000000000000000000000000000100
//	//4
//	int c1 = a | b;
//	//00000000000000000000000000000111
//	//7
//	int c2 = a ^ b;
//	//00000000000000000000000000000011
//	//3
//	printf("%d %d %d\n", c,c1,c2);
//	system("pause");
//	return 0;
//}

赋值操作符 =

复合赋值符

+= -= *= /= %= >>= <<= &= |= ^=

单目操作符

! 逻辑反操作
- 负值
+ 正值
& 取地址
sizeof 操作数的类型长度(以字节为单位)
~对一个数的二进制按位取反
– 前置、后置–
++前置、后置++
* 间接访问操作符(解引用操作符)
(类型)强制类型转换
//int main()
//{
//	/*int a = 5;
//	printf("%d \n", !a);
//	int b = 0;
//	scanf("%d", &b);
//	printf("%d\n",b);
//	printf("%d\n", sizeof b);*/
//	//int a = 5;
//	00000000000000000000000000000101
//	//int b = ~a;
//	11111111111111111111111111111010--b的补码
//	10000000000000000000000000000101--补码的反码
//	10000000000000000000000000000110--b的源码
//	-6
//	/*printf("%d\n", b);*/
//	//int a = 5;
//	//int b = a++;
//	//int b1 = ++a;
//	//printf("a=%d b=%d b1=%d\n", a,b, b1);
//	/*int a = 10;
//	int* pa = &a;
//	printf("%d \n", *pa);*/
//	system("pause");
//	return 0;
//}

关系操作符

> >= < <= != ==

//int main()
//{
//	int a = 10;
//	//==常量写在左边,变量写在右边,不容易出错
//	if (10 == a)
//	printf("%d \n", a);
//	system("pause");
//	return 0;
//}

逻辑操作符

&& || !

1.&& 全真为真,只要有一个假都为假,第一个为假就不用看后面的;
2.|| 有一个真就为真,后面的不用看;

条件操作符

表达式1? 表达式2:表达式3;
//int main()
//{
//	int a = 10;
//	int b = 20;
//	int max = a > b ? a : b;
//	printf("%d\n", max);
//	system("pause");
//	return 0;
//}

逗号表达式

表达式1,表达式2,表达式3;
//int a = 1;
//int b = 2;
//int c = (a > b, a = b + 10, a, b = a + 1);
//c=13//从左向右看表达式,但是由最后一个表达式决定c的值。

下标引用操作符

[] 操作数为两个:数组名+数组个数值;

()函数调用操作符

() 操作数为多个:函数名和传递的参数;

.结构体.成员名

-> 结构体指针->成员名

//struct Stu
//{
//	char name[20];
//	int age;
//	char sex;
//};
//void print(struct Stu tmp)
//{
//	printf("%s %d %c\n", tmp.name, tmp.age, tmp.sex);
//}
//void print1(struct Stu* tmp)
//{
//	printf("%s %d %c\n", tmp->name, tmp->age, tmp->sex);
//}
//int main()
//{
//	struct Stu s = { "zhangsan",20,'M' };
//	print(s);
//	print1(&s);
//	system("pause");
//	return 0;
//}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值