【C语言入门】操作符(上)

🎈🎈 作者 : @Y_X01
🎈🎈专栏 : C语言从无到有

✨放低姿态,空杯心态✨
在这里插入图片描述


1.算术操作符

+ - * / %

🔧+、-、*、/这四个运算符均可用于整数及浮点数的运算。
🔧 当使用/运算符时,如果两个操作数均为整型,那么执行整数除法,运算结果也为整型;如果两个操作数至少一个为浮点数,那么执行浮点数运算,运算结果 为浮点型。

🔧 %运算符只能用于两个整数相除,返回余数。

2.移位操作符

<< 左移操作符

>> 右移操作符

注:移位操作符的操作数只能是整数,一个整数在内存中存储的是补码,一位操作针对的是补码

1.左移操作: 左边抛弃、右边补0(相当于左移一位,乘以2)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-joXi4GNg-1653740404381)(C:/Users/love46/AppData/Roaming/Typora/typora-user-images/image-20220522201622579.png)]

实际上,a在没赋值的情况下,自身的值不会发生变化

2.右移操作

🔧算术右移 (右边丢弃,左边补原来的符号位数)

🔧逻辑右移 (右边丢弃,左边不用考虑符号位数,直接用0补充)

到底是 算术右移还是 逻辑右移,取决于编译器,我们常见的编译器大多都是算术右移

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6rl024ef-1653740404382)(C:/Users/love46/AppData/Roaming/Typora/typora-user-images/image-20220522202413803.png)]

对于移位运算符还需要注意的一点是:不要移动负位数,这是标准未定义的,c语言并没有规定负移位数该怎么做,所以不能写成负数

3.位操作符

& //按位与

| //按位或

^ //按位异或

注:他们的操作数必须是整数

& ----同时1则为1,否则为0

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9h9shO5w-1653740404383)(../../../../../picture/Snipaste_2022-05-22_20-29-55.png)]

| -----有1则1,否则为0

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UMXHTjIy-1653740404383)(../../../../../picture/Snipaste_2022-05-22_20-32-44.png)]

^ —相同为0,相异为1

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-edTklhsM-1653740404384)(../../../../../picture/Snipaste_2022-05-22_20-34-52.png)]

例题一 : 不能创建临时变量实现两个数的交换

#include<stdio.h>
 
int main()
{
	int a = 5;
	int b = 3;
	printf("交换前:a=%d  b=%d\n", a, b);
	//3^ 3 = 0
	//011^ 011 = 000
	//0 ^  5 = 5
	//000^ 101 = 101
	//3 ^ 5^ 3 =5
	a = a ^ b;            //3^5
	b = a ^ b;	          //3^ 5 ^ 3 = 5
	a = a ^ b;	          //3^ 5^ 5 = 3
	printf("交换后:a=%d  b=%d\n", a, b);
	return 0;
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QKegFY20-1653740404385)(C:/Users/love46/AppData/Roaming/Typora/typora-user-images/image-20220522204215855.png)]

4.赋值操作符

=

复合类型

+= a = a+ 1

-= a= a- 1

*= …

/= …

%=

>>=

<<=

&=

|=

^=

5.单目操作符

! 逻辑反操作

- 负值

+ 正值

& 取地址
sizeof 操作数的类型长度(以字节为单位)

~ 对一个数的二进制按位取反

– 前置、后置–

++ 前置、后置++
* 间接访问操作符(解引用操作符)

  1. !

//C语言中0表示假,非零表示真

	int flag = 0;
	//当flag为假的时候打印haha
	if (!flag)	//只需用上逻辑反操作符 ! 就能打印了
	{
		printf("haha\n");
	}
  1. &
 int a= 2;
 printf("%p",&a); //取出a的地址

3 . sizeof

	int a = 10;
	printf("%d\n", sizeof(a));   //计算a所占内存空间的大小为4个字节
	printf("%d\n", sizeof(int)); //计算int类型为4个字节
	int arr[5] = { 1,2,3,4,5};
	printf("%d\n", sizeof(arr));  // 数组名arr单独放在sizeof代表的是整个数组,
								  //因为arr数组是int型且里面有5个元素,
                                  //int型大小是4个字节,所以总大小为20个字节
  1. ~
int a=0;
 
printf("%d\n",~a);
 
//  0000 0000 0000 0000 0000 0000 0000 0000  -因为0是正数,原反补相同
//  1111 1111 1111 1111 1111 1111 1111 1111  - 把0的补码每一位进行取反
 
//又因为要打印出来,得把补码转换成原码
//  1111 1111 1111 1111 1111 1111 1111 1111  - 补码
//  1111 1111 1111 1111 1111 1111 1111 1110  - 反码
//  1000 0000 0000 0000 0000 0000 0000 0001  - 原码
 
//  打印出来的结果为 -1

5 – + +

#include <stdio.h>
int main()
{
    int a = 10;
    int m =++a;//先加后赋值
    int n =--a;//先减后赋值
    int x = a++;//先赋值后加
    int y = a--;//先赋值后减
    return 0;   
    }
  1. *解引用操作符
int a=10;
int *p=&a;
*p=20;  // p是指针变量存的是a的地址,*p 解引用操作符通过p存放的地址找到a,并重新给a赋值成20; 
printf("%d\n",a);   // 因此a最终的结果为20
6.关系操作符

> 大于
>= 大于等于
< 小于
<= 小于等于
!= 用来测试“不相等”
== 用来测试“相等”

注意:
1.判断字符串是否相同应该用strcmp()函数,而不能用=比较
2..编写程序代码时一定注意=和==区别,不要写错,=是做赋值操作,而==才是判断是否相等

预告:【C语言入门】—操作符(下)
在这里插入图片描述

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

署前街的少年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值