详解操作符

一、二进制和进制转换

二、原码、反码、补码

整数的二进制有三种表示方法,即原码、反码、补码

有符号的整数三种表示方法均有符号位和数值位两个部分,最高位的1位是当作符号位,其他都是数值位。正——0,负——1

正整数的三种表示都一样

负整数的三种表示方法各不相同

  1. 原码:翻译成二进制数
  2. 反码:将原码符号位不变,其余的依次取反
  3. 补码:在反码的基础上+1(补码获得反码:取反,+1)

int a=-10 4个字节,32个bit位

原码=10000000 00000000 00000000 00001010

反码=11111111 11111111 11111111 11110101(0变成1,1变成0)

补码=11111111 11111111 11111111 11110110(在反码的基础上加1)

对于整形来说,数据存放内容其实存放的是补码,数值的计算也使用的是补码

原码取反+1得到补码,补码取反+1得到原码

三、移位操作符(整数)

  1. <<
  2. >>
  3. 移位操作符的操作数只能是整数(二进制数)
  4. 移位操作符:玩右移补符号位,往左移补0
  5. 左移操作符

规则:抛弃左边,右边添0

int a=6

a=00000000 00000000 00000000 00000110 原码/反码/补码

int b = (a<<1)

b=00000000 00000000 00000000 00001100=12

注意:a的值是不变的

int a=-6

a=10000000 00000000 00000000 00000110 原码

a=11111111 11111111 11111111 11111001 反码

a=11111111 11111111 11111111 11111010 补码

int b=(a<<1)=-12

b=11111111 11111111 11111111 11110100 补码

b=10000000 00000000 00000000 00001011 反码

b=10000000 00000000 00000000 00001100 原码

注意:补码去计算,打印的是原码

  1. 右移操作符

逻辑右移:左边添0,右边抛弃

算数右移:左边用原有的操作符填充,右边丢弃

-1>>1是算数右移(大多数见到是算数右移)

因为当是负数时,如果第一位变成0不能表示负数,所以用的时算数右移

对于移位运算符,不要移动负数位

四、位操作符 & | ^ ~

  1. & 按位与
  2. | 按位或
  3. ^ 按位异或
  4. ~ 按位取反

1、按位&(有0则为0)

2、按位或|(两个为0才为0)

3、按位异或^(相同为0,相异为1)

4、按位取反(0——1,1——0,包括符号位)

五、异或例题

a=a^b

b=a^b=(a^b)^b=a^b^b=a

a=a^b=a^a^b=b

六、将二进制数的1的个数打印出来

1、方法一

输入n的值,在内存中存的是-1的补码,当n强制转化为1,所以它的原码和补码都相同了,因为没有符号位,就变成了一个很大的整数

2、方法二

  1. 我们只需要得到最后一位数字是多少

将输入的数字&1的二进制数=最后一位如果为0,就得到0。如果为1就得到1

  1. 然后运算一次后再>>1,去得到前一位的值,直到所有的数都被运算过一遍,也就是循环32次

3、方法3

因为n与n-1进行&运算,他总是能将最右边的1消灭掉

如何判断一个数是否是2的次方数

因为在2进制中,2的次方数的二进制数只有一个1

我们可以有count=1判断

也可以用n&(n-1)=0判断

七、二进制位置0置1

八、逗号表达式

  1. 从左向右计算,结果是最后一个表达式的结果
  2. 可以将上面的代码写出逗号表达式,从左向右计算,最后一个为真则执行

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值