运算符


& 和 && 的区别,| 和||的区别?

不管右边结果是什么,都要去执行左边。

 

^ 和 | 的区别,当两边都为true时返回false。

 

进制的转换:

十进制转二进制:对十进制除以2,如:  6 = 110

 

二进制转十进制:二进制乘以2,如 110 ,0*2(0)+1*2(1)+1*2(2)

 

二进制转十六进制:四个二进制就是一个16进制位。

如:0101 1010 = 5 10,在十六进制里10代表A,十六进制前加0x,所以这里是0x5A

 

二进制转八进制:三个二进制位代表一个8进制位,不足补0

如:0101 1010 = 132

 

 

二进制中负数的表达形式:

如: 6 = 110

6是int 型的话,以32个进制位表示,即

0000-0000 0000-0000 0000-0000 0000-0110

而6的负数表示,则是将6的二进制取反,即

1111-1111 1111-1111 1111-1111 1111-1001

取反后,再加上1,1的二进制表达形式是:

0000-0000 0000-0000 0000-0000 0000-0001

进行相加

1111-11111111-1111 1111-1111 1111-1001

+0000-0000 0000-0000 0000-0000 0000-0001

=1111-1111 1111-1111 1111-1111 1111-1010

最后相加的结果就是:-6

 

负数的最高位都是为1,相反,为0则为正数

 

位运算符:

<<   左移:

例:6 << 2

0000-0000 0000-0000 0000-0000 0000-0110    这是6的二进制位

将这个二进制向左移动2位,后面补0,即:

00-0000 0000-0000 0000-0000 0000-011000

这里的结果是24

 

>>  右移

例:5 >>2

0000-0000 0000-0000 0000-0000 0000-0101    这是5的二进制位

将这个二进制向右移动2位,移出的2位去掉,前面补0,即:

000000-0000 0000-0000 0000-0000 0000-01

这里的结果就是1

 

>>> 无符号右移 和 >>右移的 区别:

>>右移时补位是需要根据这个二进制位最高位决定,如果最高位为1,则补1,最高为0,则补0。

而>>> 无论最高位为0或者1,都补0。、

 

左移:拿这个数 * 2 (移动位数次幂)

右移:拿这个数 / 2 (移动位数次幂)

 

& 与运算

例:6 & 2

先转成二进制:

0000-0000 0000-0000 0000-00000000-0110

& 0000-0000 0000-0000 0000-0000 0000-0010

= 0000-0000 0000-0000 0000-0000 0000-0010

结果:2

 

| 或运算

例:7 | 3

先转成二进制:

0000-0000 0000-0000 0000-00000000-0111

|0000-0000 0000-0000 0000-0000 0000-0011

=0000-0000 0000-0000 0000-0000 0000-0111

结果:7

 

^ 异或运算

例:9 ^ 3

先转成二进制:

0000-0000 0000-0000 0000-00000000-1001

^ 0000-0000 0000-0000 0000-0000 0000-0011

=0000-0000 0000-0000 0000-0000 0000-1010

结果:12

一个数异或同一个数2次,结果还是那个数。

 

 

 

 

 

 

实例:不用第三方变量,将两个变量的值进行交换。

int n = 3;

int m = 8;

 

n = n ^ m;

n = 0000-0000 0000-0000 0000-0000 0000-0011

m = 0000-0000 0000-0000 0000-0000 0000-0110

n = 0000-0000 0000-0000 0000-0000 0000- 0101

 

m = n ^ m;

n = 0000-0000 0000-0000 0000-00000000- 0101

m = 0000-0000 0000-0000 0000-0000 0000-0110

m = 0000-0000 0000-0000 0000-0000 0000-0011

 

n = n ^ m;

n = 0000-0000 0000-0000 0000-0000 0000-0101

m = 0000-0000 0000-0000 0000-0000 0000-0011

m = 0000-0000 0000-0000 0000-0000 0000-0110

 

 

~反码

就是将一个数的二进制取反

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值