目录
一、算数操作符
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;
}
以上是关于介绍操作符中的算数操作符和移位操作符,接下来会持续更新介绍其它操作符,希望能够得到大家的支持!