在这里插入图片描述

一,算数运算符(这里只重点写“/”和“%”)

1.“/”除法操作符

如果两个操作数都是整数,执行整数除法,如果两个数有一个是小数执行浮点数除法(double类型),执行浮点数除法。(两种除法除数都不能为0)

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

// "/"除法 除号两端都是整数则执行的时整数除法    如果两端有一个是小数则执行浮点数除法          除数都不能为0
int main() {
	int r = 7 / 2;
	printf("%d\n", r);//3
	double n = 7 / 2;
	printf("%lf", n);//3.000000  必须有一个数是小数,用double接收打印才会是浮点数
	double d = 7.0 / 2;
	printf("%lf", d);//3.500000
	return 0;
}

2.“%”取余操作符

% 操作符的两个操作数必须为整数。返回的是整除之后的余数。

int main() {
	int r = 17 % 8;
	printf("%d\n", r);//1
	int d = 123 % 10;
	printf("%d\n", d);//3
	int s = 123 / 10;
	printf("%d\n", s);//12
	int n = 123 / 10 % 10;
	printf("%d\n", n);//2
		int y = 123 / 100;
		printf("%d", y);//1


	return 0;
}

二、移位操作符

移动的是整数在内存中的补码,只有整数才能位移,位移量只能是正数,
整数在内存中是以补码的形式储存的,计算也是通过补码,但我们在计算的时候是要用原码的。

二进制的正\负数是由码开头的0\1表示的
正数的原、反、补码都是一样的
如:

负数的反码是把原码的1换成0,0换成1,补码=反码+1(注意开头一位是符号位不变)
如:在这里插入图片描述

1.“>>”右移操作符

右移操作符在C语言中是“算数移动”——右边丢弃,左边补符号位
在这里插入图片描述

2.“<<”左移操作符

左边丢弃右边补0
在这里插入图片描述

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

三、位操作符

(操作的也是二进制补码(整数))

1.“&” 按位异

对应补码,有0为0,两个同时为1才为1
a=3 补码:0000000000000011
b=-5 补码:111111111111111011
a&b 补码:0000000000000011 ==>3

应用:编写一个代码,求一个整数储存在内存中的1的个数
在这里插入图片描述

2."|"按位或

有1为1,同为0才为0
a=3 补码:0000000000000011
b=-5 补码:111111111111111011
a|b 补码:111111111111111011 (负数的补码)==>(反码):111111111111111010–>(原码): 1000000000000101
所以a|b=-5

应用:把13的二进制中的低5位改为1
在这里插入图片描述

3."^"按位异或

相同为0相异为1
a=3 补码:0000000000000011
b=-5 补码:111111111111111011
a^b 补码:111111111111111000–>反码:111111111111110111–>原码:1000000000001000
所以a^b=-8

"^“”的应用:,要求不能建立第三个变量来实现交换两个整数

在这里插入图片描述

四.赋值及复合赋值操作符号

1.赋值操作符"="

2.复合赋值操作符

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

五、单目操作符介绍(只有一个操作数)

! 逻辑非
在这里插入图片描述
+正值
-负值

&取地址
*解引用操作符(间接访问操作符)

int main() {
	int a = 10;
	//pa是指针变量
	int* pa = &a;//取地址操作符,取出a的地址

	*pa = 20;//*pa 为解引用操作符(间接访问操作符)-单目操作符-通过中存放的地址,指到相应的空间内容

}

sizeof 求操作数类型的长度(以字节为单位)
如:

int main() {
	int a = 0;
	printf("%d\n", sizeof(int));//4   int 类型4个字节
	printf("%d\n", sizeof(a));//4
	printf("%d\n", sizeof a);//4
	int arr[10] = { 0 };
	printf("%d\n", sizeof(int [10]));//40   int [10]类型40个字节
	printf("%d\n", sizeof(arr));//40

	return 0;
}
void test1(int arr[]) {//int*
	printf("%d\n", sizeof(arr));//4  因为是在x86状态

}
void test2(char ch[]) {//char*
	printf("%d\n", sizeof(ch));//4

}
int main() {
	int arr[10] = { 0 };
	char ch[10] = { 0 };
	printf("%d\n", sizeof(arr));//40
	printf("%d\n", sizeof(ch));//10
	test1(arr);//传过去的是arr[0]的地址
	test2(ch);//传过去的是arr[0]的地址
	return 0;
}

~ 按位取反(按照补码二进制取反)
a=0
~a
补码:00000000000000000
取反:1111111111111111111(负数的补码)—>反码:1111111111111111110–>原码:10000000000000001

=-1
在这里插入图片描述

应用:把000000000000000011101的第5位的1换成0

在这里插入图片描述

拓展:我们有这样的输入判断语句

在这里插入图片描述

++ – 加加 减减

后置++(先使用再++把值赋给原来的数)

int main() {
	int a = 3;
	int b = a++;   //后置++。先使用 后++
	//b=a;a=a+1
	printf("a=%d b=%d",a, b);//a=4 b=3
	return 0;
}

前之++,先++,再使用

int main() {
	int a = 3;
	int b = ++a;   //先++。再使用
	//a=a+1;b=a;
	printf("a=%d b=%d", a, b);//a=4 b=4
	return 0;
}

"–"同理。

(类型) 强制转换类型

int main() {
	int a = (int)3.14;//把3.14强制转换成int类型,编译器就不会报错
	printf("%d", a);//3

	return 0;
}

六、条件操作符

只能应用到合适的类型上(不能比较自己定义的一些东西)比如自己定义的字符串

=
<
<=
!= 用于测试相等
== 用于测试”相等“

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐