阅读源码时候发现自己对这些运算还不熟悉,所以写篇文章记录下来
符号 | 描述 | 说明 | 0 0 | 0 1 | 1 0 | 1 1 |
---|---|---|---|---|---|---|
| | 或 | 两个位都为1时才为1 | 0 | 0 = 0 | 0 | 1 = 0 | 1 | 0 = 0 | 1 | 1 = 1 |
& | 与 | 两个位都为0时才为0 | 0 & 0 = 0 | 0 & 1 = 0 | 1 & 0 = 0 | 1 & 1 = 1 |
^ | 异或 | 两个位相同为0,不同为1 | 0 ^ 0 = 0 | 0 ^ 1 = 1 | 1 ^ 0 = 1 | 1 ^ 1 = 0 |
~ | 取反 | 0变1 ,1 变 0 | ||||
<< | 左移 | 各二进位全部左移若干位,高位丢弃,低位补0 | ||||
>> | 右移 | 各二进位全部右移若干位,对无符号数,高位补0,有符号数,各编译器处理方法不一样,有的补符号位(算术右移),有的补0(逻辑右移) |
原码补码反码
1、正数的原码、反码、补码都一样;
2、负数的反码 = 它的原码符号位不变,其他位取反(取反的意思:0 换成 1 、 1 换成 0 );
3、负数的补码 = 它的反码 +1;
4、0的反码、补码都是0;
【特别注意】
1、在计算机运算的时候,都是以 补码 的方式来运算的 。
2、二进制 转为 十进制,必须使用 二进制 的原码进行转换
3、补码的补码就是原码