有些人是因为看见而相信,有些人则是因为相信而看见。相信自己,成为自己生命的那道光,才能照亮前方黑暗的道路,看见希望的曙光。
一、算术操作符
+ - * / %
1.除了 % 操作符之外,其他的几个操作符可以作用于整数和浮点数
2.对于 / 操作符如果两个操作数都为整数,执行整数除法(求商舍余)。而只要有浮点数,执行的就是浮点数除法。
3. % 操作符的两个操作数必须为整数,若其中一个不为整数则报错,返回的是整除之后的余数。
#include<stdio.h>
int main()
{
int a = 5;
int b = 2;
int c = 0;
printf("a+b = %d\n", a + b);//相加
printf("a-b = %d\n", a - b);//相减
printf("a*b = %d\n", a * b);//相乘
printf("a/b = %d\n", a / b);//求商
printf("a%%b = %d\n", a % b);//取模
return 0;
}
#include<stdio.h>
int main()
{
/*double a = 5.0 / 2;*/
double a = 5 % 2.0;//报错
printf("a = %lf", a);
return 0;
}
二、移位操作符
<< >>
左移操作符 << 操作二进制补码
移位规则:左边抛弃、右边补0
总结:左移移动一位正数相当于直接乘以2,负数也一样,移动n位,乘以2 ^ n。
右移操作符 << 操作的是二进制补码
计算机中的数字都是以补码的形式存储的,其中正数原码、反码、补码相同,负数的反码由原码按位取反(符号位不变)求得,补码 = 反码 + 1。
十进制:1 二进制原码 / 反码 / 补码:00000000 00000000 00000000 00000001
十进制: - 1
二进制原码:10000000 00000000 00000000 00000001
二进制反码:11111111 11111111 11111111 11111110
二进制补码:11111111 11111111 11111111 11111111
-1 >> 1(右移一位) 二进制补码:_1111111 11111111 11111111 11111111
首先右移运算分两种 :
1.算术移位左边用原该值的符号位填充,右边丢弃
2.逻辑移位左边用0填充,右边丢弃
按照算术移位 那么_该填充 1 二进制补码:11111111 11111111 11111111 11111111 -> - 1(转原码)
按照逻辑移位 那么_该填充 0 二进制补码:01111111 11111111 11111111 11111111 -> 1(转原码)
应用实际的代码进行验证:
#include<stdio.h>
int main()
{
int a = -1;//00000000 00000000 00000000 00010000
int b = a >> 1;// _0000000 00000000 00000000 00001000
//_ 位置有两种方式填充 1.算术右移:补充符号位 2.逻辑右移:直接补0
//注意计算机存储的是二进制补码 正数三码合一 负数的补码=反码+1
printf("%d\n", b);
return 0;
}