操作符详解(1)算数操作符,移位操作符

目录

一,算数操作符

1、算数操作符的种类

2、算数操作符的介绍和运算规则

二,移位操作符

1、移位操作符的种类

2、移位操作符的运算规则


一、算数操作符

1、算数操作符的种类

算数操作符有+    -      *     /      %

2、算数操作符的介绍和运算规则

+:加法运算符是需要两个操作数的双目运算符

 - :当只需要一个操作数的时候为单目运算符

       需要两个操作数的时候为减法运算符

*  :乘法运算符是需要两个操作数的双目运算符

 /  :除法运算符是需要两个操作数的双目运算符

%:取模运算符是需要两个操作数的双目运算符

简而言之,除计算相反数是单目运算符以外,其余的算数运算符都是双目运算符

使用的时的注意事项

1.除了 % 操作符之外,其他的几个操作符可以作用于整数和浮点数。

2.对于 / 操作符如果两个操作数都为整数,执行整数除法。而只要有浮点数执行的就是浮点数除法。

3.对于 / 操作符如果两个操作数都为整数,执行整数除法。而只要有浮点数执行的就是浮点数除法。

二、移位操作符

1、移位操作符的种类

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

注意:移位操作符的操作数只能时整数

2、移位操作符的运算规则

 左移操作符

 移位规则:左边舍弃、右边补0

右移操作符

 移位规则有分两种:

①算数右移:右边舍去,左边补原符号位

②逻辑右移:右边舍去,左边用0填充

在理解上面的规则时,先了解整数在内存中时如何存储的?

答案是整数在内存中是以补码的二进制存储的

补码又是什么?

整数的二进制表示有三种形式:原码,反码,补码

正数的原码、反码、补码时相同的

负数的原码、反码、补码是要计算的

如何计算补码?

负数的原码符号位不变,其它位按位取反得到的是反码,反码+1得到的是补码

#include<stdio.h>
int main()
{
	int a = 5;
	//00000000000000000000000000000101原码
	//00000000000000000000000000000101反码
	//00000000000000000000000000000101补码
	int b = -5;
	//10000000000000000000000000000101原码
	//符号位不变,其他位按位取反->反码
	//11111111111111111111111111111010反码
	//反码+1->补码
	//11111111111111111111111111111011补码
	return 0;
}

最后回到开头

 左移操作符

 移位规则:左边舍弃、右边补0 如何理解

该移位的是整数的补码,打印的是该整数的原码


#include<stdio.h>
int main()
{
	int a = 5;
	//原、反、补码
	//00000000000000000000000000000101(32位)
	int b = a << 1;
	//5的补码向左移动一位
	//0000000000000000000000000000101(31位,左边已经丢弃)
	//左边丢弃、右边补0
	//00000000000000000000000000001010(右边补0)
	printf("a=%d\n", a);
	printf("b=%d\n", b);
 //结果a=5,b=10
	return 0;
}
#include<stdio.h>
int main()
{
	int a = -5;
	//10000000000000000000000000000101原码
	//11111111111111111111111111111010反码
	//11111111111111111111111111111011补码
	//5的补码向左移动一位
	//11111111111111111111111111110110
	//补码-1->反码
	//11111111111111111111111111110101
	//符号位不变,其它位按位取反->原码
	//10000000000000000000000000001010 
	int b = a << 1;
	printf("a=%d\n", a);
	printf("b=%d\n", b);
	//结果a=-5,b=-10
	return 0;
}

右移操作符

 移位规则有分两种:

①算数右移:右边舍去,左边补原符号位

②逻辑右移:右边舍去,左边用0填充

同理移位的是整数的补码,打印的是该整数的原码

具体是算数右移还是逻辑右移是取决于编译器的!

当前使用的是vs2022,采用的是算数右移

#include<stdio.h>
int main()
{
	int a = 5;
	//原、反、补码
	//00000000000000000000000000000101(32位)
	int b = a >> 1;
	//5的补码向右移动移位
	// 0000000000000000000000000000010(31位)
	//补符号位
	//00000000000000000000000000000010(32位)
	printf("a=%d\n", a); 
	printf("b=%d\n", b);
	//结果a=5,b=2
	return 0;
}
#include<stdio.h>
int main()
{
	int a = -5;
	//10000000000000000000000000000101原码
	//11111111111111111111111111111010反码
	//11111111111111111111111111111011补码
	int b = a >> 1;
	//-5的补码向右移动一位
	// 1111111111111111111111111111101(31位)
	//补符号位
	//11111111111111111111111111111101(32位)
	//补码-1->反码
	//11111111111111111111111111111100
	//反码符号位不变,其它位按位取反->原码
	//10000000000000000000000000000011
	printf("a=%d\n", a);
	printf("b=%d\n", b);
 //结果a=-5,b=-3
	return 0;
}

以上是关于介绍操作符中的算数操作符和移位操作符,接下来会持续更新介绍其它操作符,希望能够得到大家的支持!


 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值