操作符详解(一)


一、操作符类型分类

操作符可分为下面这些类型:
算术操作符
移位操作符
位操作符
赋值操作符
单目操作符
关系操作符
逻辑操作符
条件操作符
逗号表达式
下标引用、函数调用和结构成员

二、算数操作符

’+‘加 ’-‘减 ’*‘ 乘’/‘除 ’%‘ 取余

这个部分的操作符用法其实和数学中一样,我们只需要注意一下其中的==’/‘除法'%'取余就好。
1.
’/‘除法操作符==的除数不能为0,这不符合数学规律,编译器也会报错,例如:

#include<stdio.h>
int main()
{
	int m = 5;
	int n = 0;
	printf("%d",m/n)	
	return 0;
}

编译器无法算出答案。
2.当两边都是不为正整数时,计算出的结果和数学中的一样吗?

#include<stdio.h>
int main()
{
	flaot m = 23/10;//输出2.000000
	int n = 23/10;//输出2
	printf("%d",m)printf("%d",n);	
	return 0;
}

尽管上面m的数据类型为flaot浮点型,但是返回的数值仍为2.000000。这是因为当两边都是整数时,C语言中的整除运算只会返回整数,会将 小数舍去。那当我们需要小数时该怎么得到它呢?

#include<stdio.h>
int main()
{
	flaot m = 23.0/10;//或者写成23/10.0
	printf("%d",m)return 0;
}

其实这很简单,我们只需要向上面一样,将23改为23.0或者将10改为10.0就可以,当我们需要得到浮点数的结果时,两个数中有一个数变为浮点数就可。

’%‘取余操作符为取模运算,即返回两个整数相除的余值。它只能用于整型,不能用于浮点型。

负数求模时,第一个运算数的正负号决定了结果的正负号。

#include<stdio.h>
int main()
{
	int m = 23%10;//输出3
	int n = -23%10;//输出-3
	int a = -23%-10;//输出-3
	printf("%d",m);
	printf("%d",n);	
	printf("%d",a);	
	return 0;
}

三、移位操作符

移位操作符分为左移操作符和右移操作符。
移位操作符的操作数只能为整数。
其中的指的是二进制位。

1.左移操作符

移位规则:左边抛弃,右边补零。

#include<stdio.h>
int main()
{
	int m = 4;
	printf("%d\n",m << 2);
	printf("%d",m);//观察一下它本身的变化
	return 0;
}

运行结果如下:

16
4

由上面的运行结果显示,m向左移并不影响本身。

当向左移的数为负数时

#include<stdio.h>
int main()
{
	int m = -4;
	printf("%d\n",m << 2);
	printf("%d",m);//观察一下它本身的变化
	return 0;
}

运行结果为:

-16
-4

在这里插入图片描述
这是简单的分析结果。
正整数的原、反、补码都相同。
负整数的三种表⽰⽅法各不相同。
原码:直接将数值按照正负数的形式翻译成⼆进制得到的就是原码。
反码:将原码的符号位不变,其他位依次按位取反就可以得到反码。
补码:反码+1就得到补码。

对于整形数据来说,数据存放在内存中的是补码。

2.右移操作符

右移分为逻辑右移和算术右移。

1.逻辑右移:左边填零,右边丢弃
2.算术右移:左边由原来的符号位确定,右边丢弃

对于移位运算符,不要移动负数位,这个标准是未被定义的。

四、位操作符

位操作符的分类

1.&按位与操作符
2.|按位或操作符
3.^按位异或操作符

同时位操作符的操作数也只能是整形。
这里的位指的也是二进制位。

接下来我们就看代码:

#include<stdio>
int main()
{
	int m = 48;
	int n = 16;
	printf("%d\n",m&n);
	printf("%d",m|n);
	printf("%d",m^n);
	return 0;
}

在这里插入图片描述
1.& (按位与操作符):只有都为1时才是1,其它都为0.
2.’ | '(按位或操作符):只要有1就是1,除非你都是0.
3.’ ^ '(按位异或操作符):相同则就是0,不同就是1.

五、赋值操作符

赋值操作法的话,是我们经常能用到的,我们只要不满意一开始输入的值,就可以重新赋值,看代码。

//赋值操作符
#include<stdio.h>

int main()
{
	int weight = 100;
	//太重了,我减肥了
	//重新赋值
	weight = 50;
	//也可以连续赋值
	int m = 0;
	int x = 5;
	m = x = 10 + 1;

	//不过它不方便调试,也不是很美观
	//一般还是分开写
	x = 10 + 1;
	m = x;


	return 0;
}
//复合赋值符

#include<stdio.h>

int main()
{
	int m = 10;
	printf("%d\n", m += 2);
	//这里的m += 2相当于
	//m = m + 2;
	//下面这些也类似
	printf("%d\n", m -= 2);
	printf("%d\n", m *= 2);
	printf("%d\n", m /= 2);
	printf("%d\n", m <<= 2);
	printf("%d\n", m >>= 2);
	printf("%d\n", m %= 2);
	printf("%d\n", m &= 2);
	printf("%d\n", m |= 2);
	printf("%d\n", m ^= 2);

	return 0;
}

运行结果如下:
在这里插入图片描述

六、单目操作符

单目操作符有:

1.! 逻辑反操作
2.- 负值
3.+ 正值
4.&取地址
5.sizeof 操作数的类型长度(以字节位单位)
6.~ 对一个数的二进制按位取反
7.-- 前置、后置
8.++前置、后置
9.* 解引用操作符
10.(类型)强制类型转换

1)!逻辑反操作符:就是将结果取反,真的变为假的,假的变为真的。

#include<stdio.h>

int main()
{
	int m = 10;
	int n = 0;
	printf("%d\n", !m);
	printf("%d\n", -m);
	printf("%d\n", !n);

	return 0;
}

运行结果为:

0
-10
1

C语言中用0表示逻辑假,非零表示逻辑真。
2)sizeof和数组

void test1(int A[])
{
	printf("%d\n", sizeof(A));

}


void test2(char ch[])
{
	printf("%d\n", sizeof(ch));
}
#include<stdio.h>
int main()
{
	int A[10];
	char a[10];
	printf("%d\n", sizeof(A));
	printf("%d\n", sizeof(a));
	test1(A);
	test2(a);

	return 0;
}
	

sizeof求的是变量类型的大小。结果为:

40
10
4
4

3)++、–

//前置++、--和后置++、--

#include<stdio.h>

int main()
{
	int m = 10;
	int x = ++m;
	//前置++,先自增,后使用;所以x = 11
	int y = --m;

	//同理,先自减,后使用,所以y的值为10

	//后置++、--
	int  n = 10;
	int a = n++;
	//后置++,先使用,后自增,所以a的值为10
	int b = n--;
	//同理,先使用,再自减,所以b的值为11
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值