●🧑个人主页:你帅你先说.
●📃如果文章有帮助,欢迎点赞👍关注💡收藏💖
●📖既选择了远方,便只顾风雨兼程。
●🤟欢迎大家有问题随时私信我!
●🧐版权:本文由[你帅你先说.]原创,CSDN首发,侵权必究。
目录
1.算术操作符
+ - * / %
int ret = 9/2;
double ret = 9/2;
大家可能会认为9/2算出来是4是因为int整型,实际上不是,当你以double类型打印时结果是4.0,所以说这是‘/’自身的特点,并不是int类型造成的。
那要怎么算出4.5呢?
上面第二点提到了,只要有浮点数就执行浮点数除法,所以可以改成9.0/2或者9/2.0就能算出4.5了。
2.移位操作符
<< 左移操作符>> 右移操作符
移位操作符,移动的是二进制位
对于整数的二进制有3中表示形式:原码、反码、补码
正整数 - 原码、反码、补码相同
负整数
原码 - 直接按照数字的正负写出的二进制序列
反码 - 原码的符号位不变,其他位按位取反得到的
补码 - 反码+1
二进制的第一位为符号位,负数为1,正数为0。
整数在内存中存储的是二进制的补码
那移位操作符是怎么对二进制进行移位的呢?
int a = 5;
int b = a << 1;
以32bit系统为例
算出来结果是10
注意:此时a的值还是5,b的值是10,移位操作符并不对自身进行改变。
刚刚上面是以左移操作符为例,实际上右移操作符遵循的规则和左移略有不同。
首先右移运算分两种:1. 逻辑移位左边用0填充,右边丢弃2. 算术移位左边用原符号位填充,右边丢弃
大部分编译器采用的是算术移位。
int a = -1;
int b = a >> 1;
图解
因为-1的原符号位是1,所以补1。
3.位操作符
& 按位与
| 按位或
^ 按位异或注:他们的操作数必须是整数。
3.1 &(按位与)
int a=3 b=5;
c=a&b;
a的二进制 00000000000000000000000000000011
b的二进制 00000000000000000000000000000101
结果为 00000000000000000000000000000001
即只要有0即为0,其余不变(1向左移位按位与这个数可以找二进制里有几个1)
3.2 |(按位或)
a的二进制 00000000000000000000000000000011
b的二进制 00000000000000000000000000000101
结果为 00000000000000000000000000000111