操作符详解(一)

操作符分类:

算术操作符
移位操作符
位操作符
赋值操作符
单目操作符
关系操作符
逻辑操作符
条件操作符
逗号表达式
下标引用、函数调用和结构成员

1. 算术操作符

在这里插入图片描述
在这里主要介绍 / 和 %的作用

’ / ’

#include<stdio.h>
int main()
{
	//操作符(运算符)
	int ret1 = 10 / 3;
	//对于除法操作符来说,如果除号两边都是整数,执行的是整数除法
	//如果想计算出小数,除号两边至少有一个是浮点数
	double ret2 = 10 / 3.0;
	printf("%d\n", ret1);
	printf("%lf\n", ret2);
	//如果值想得到小数点后一位,在lf前加 .1 即可
	//想得到小数点后几位,只需.+整数,例如:.2lf .3lf
	printf("%.1lf\n", ret2);
	return 0;
}

在这里插入图片描述
‘%’(取模或者取余操作符,计算的是整除之后的余数)
在这里插入图片描述

总结:
1. 除了 % 操作符之外,其他的几个操作符可以作用于整数和浮点数。
2. 对于 / 操作符如果两个操作数都为整数,执行整数除法。而只要有浮点数执行的就是浮点数除法。
3. % 操作符的两个操作数必须为整数。返回的是整除之后的余数。

2. 移位操作符

<< 左移操作符
>> 右移操作符

内存中存储的是二进制的补码,所以进行移位的时候是对补码进行移位

注:移位操作符的操作数只能是整数。

2.1 左移操作符

移位规则:
左边抛弃、右边补0
在这里插入图片描述

2.2 右移操作符

移位规则:
首先右移运算分两种:
1. 逻辑移位
左边用0填充,右边丢弃
2. 算术移位(平常使用)
左边用原该值的符号位填充,右边丢弃

在这里插入图片描述

算数右移:
在这里插入图片描述

逻辑右移:
在这里插入图片描述

平时右移时是采取的是算数右移

在这里插入图片描述
警告⚠ :
对于移位运算符,不要移动负数位,这个是标准未定义的。
例如:

int num = 10;
num>>-1;//error

3. 位操作符

位操作符有:

& //按位与
| //按位或
^ //按位异或
注:他们的操作数必须是整数。

& - 按(2进制)位与
对应的二进制位有0则0,两个同时为1,才为1
在这里插入图片描述
| - 按(二进制)位或
对应的二进制位有1则为1,两个同时为0则为0
在这里插入图片描述
^ - 按(2进制)位异或
对应的二进制位:相同为0,相异为1
在这里插入图片描述

4. 赋值操作符

赋值操作符是一个很棒的操作符,他可以让你得到一个你之前不满意的值。也就是你可以给自己重新赋值。

int weight = 120;//体重
weight = 89;//不满意就赋值
double salary = 10000.0;
salary = 20000.0;//使用赋值操作符赋值
赋值操作符可以连续使用,比如:
int a = 10;
int x = 0;
int y = 20;
a = x = y+1;//连续赋值
这样的代码感觉怎么样?
那同样的语义,你看看:
x = y+1;
a = x;
这样的写法是不是更加清晰爽朗而且易于调试。

复合赋值符
+=
-=
*=
/=
%=
>>=
<<=
&=
|=
^=

这些运算符都可以写成复合的效果。
比如:

int x = 10;
x = x+10;
x += 10;//复合赋值
//其他运算符一样的道理。这样写更加简洁

5. 单目操作符

5.1 单目操作符介绍

! 逻辑反操作
- 负值
+ 正值
& 取地址
sizeof 操作数的类型长度(以字节为单位)
~ 对一个数的二进制按位取反
– 前置、后置–
++ 前置、后置++
* 间接访问操作符(解引用操作符)
(类型) 强制类型转换

! 逻辑反操作就是进行取反,把原来的意思转换成相反的意思。
例如:

在这里插入图片描述
a为5,所以第一个打印出haha,又因为a为1 !=5,所以打印了wuwu。


&和 *

取地址是取出一个变量名的地址

int main()
{
	int a = 10;
	printf("%p\n", &a);
	int* pa = &a;

	char ch = 'w';
	char*pc = &ch;
	
	char arr[10] = { 0 };
	char* p2 = arr;
	char* p3 = &arr[0];

	char* p = "abcdef";
	printf("%p\n", p);
	printf("%c\n", *p);

	return 0;
}
* 间接访问操作符(解引用操作符),通常用于地址的解引用。

在这里插入图片描述
&取出a的地址放在pa里,通过*解引用找到a,可以对a进行修改以改变a的值。


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

int main()
{
	int a = 10;
	printf("%d\n", sizeof(a));//ok
	printf("%d\n", sizeof a );//ok
	printf("%d\n", sizeof(int));//ok
	//printf("%d\n", sizeof int);

	int arr[10] = { 0 };
	printf("%d\n", sizeof(arr));//ok
	printf("%d\n", sizeof arr);//ok
	printf("%d\n", sizeof(int [10]));//ok


	return 0;
}

函数调用的时候,要写()
但是sizeof后边的括号可以省略,说明sizeof不是函数
sizeof后面是变量名可以省略(),但后面是类型的时候不可以省略()


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

~ 不考虑符号位,是对所以的二进制数进行按位取反

在这里插入图片描述

~按位取反
000000000000000000000000000000000 - 0的补码
111111111111111111111111111111111 - 对0进行按位取反
100000000000000000000000000000001 - -1的原码


~ | & << >> ^ 的代码示例

int main()
{
	int a = 9;
	//00000000000000000000000000001001
	//00000000000000000000000000010000      1<<4
	//00000000000000000000000000011001
	//
	//把a的二进制中第5位改成1
	a |= (1<<4);
	printf("%d\n", a);

	//把a的二进制中的第5位改回来,变成0
	//00000000000000000000000000011001
	//11111111111111111111111111101111     ~(1<<4)
	//00000000000000000000000000001001

	a &= (~(1 << 4));
	printf("%d\n", a);//9

	return 0;
}

本篇就到此结束了,喜欢的小伙伴们点个赞吧!
在这里插入图片描述
(如有错误,请留言评论,不胜感激!)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

CC小师弟

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

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

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

打赏作者

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

抵扣说明:

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

余额充值