源码反码补码、进制转换、Java中的运算符

目录

1 数字的二进制

1.1 正数

1.2 负数

2 二进制转十六进制

3 Java中的运算符

3.1 与运算符&

3.2 或运算符|

3.3 非运算符~

3.4 异或运算符^

3.5 位移运算符<<

3.6 位移运算符>>

3.7 位移运算符>>>


1 数字的二进制

我们知道计算机只认识0和1,数字在计算机中就是以二进制表示的。这里提到三个概念:原码、反码和补码。数字的表示形式就是补码,即我们平时在代码中看到的所谓的某个数字的二进制表示就是说这个数字的补码。

1.1 正数

正数的原码、反码和补码都是一样的,比如int值5的的原码、反码和补码都是:

00000000 00000000 00000000 00000101

所以5在计算机中的表示也是00000000 00000000 00000000 00000101。

1.2 负数

先说3点概念:

  • 负数的原码:按照绝对值大小转换成的二进制数,然后最高位补1。
  • 负数的反码:原码除最高位,其余位取反。
  • 负数的补码:反码+1。

-5的原码为:  10000000 00000000 00000000 00000101。

-5的反码为:11111111 11111111 11111111 11111010。

-5的补码为:11111111 11111111 11111111 11111011。

补码11111111 11111111 11111111 11111011就是-5在计算机中的表示。

注意:负数的补码转换为十进制的步骤就是把计算补码的步骤反过来,即:先将-5的补码-1,然后除符号位取反,最终计算即可。

2 二进制转十六进制

四位二进制对应一位16进制,按顺序求就行。

3 Java中的运算符

一般用于二进制的运算。

3.1 与运算符&

双目云算符。两个位数中位都为1,结果才为1,否则结果为0。

3.2 或运算符|

双目云算符。两个位数中只要有一个为1,那么结果为1,否则结果为0.

3.3 非运算符~

单目云算符。所有位取反(0取1,1取0)。

3.4 异或运算符^

双目云算符。两个位数相同结果为0,不同结果为1。

3.5 位移运算符<<

将一个数的各二进制位全部左移N位,右补0。如10<<2,10的二进制为0000 0000 0000 1010,结果为0000 0000 0010 1000,即40。

3.6 位移运算符>>

将一个数的各二进制位全部右移N位,移到右边的低位被舍弃,对于无符号数高位补0,负数高位补1。如10>>2,10的二进制为0000 0000 0000 1010,结果为 0000 0000 0000 0010,即为2;如-10>>2,-10的补码为1111  1111  1111  0110,结果为1111  1111 1111   1101,十进制(转换方法见1.2)结果为-3。

3.7 位移运算符>>>

不带符号的将一个数的各二进制位全部右移N位,移到右边的低位被舍弃,不管有符号数还是无符号数高位统一补0,位移之后的结果视为无符号数(高位是0肯定就是无符号数了)。如-10>>>2,-10的补码为1111  1111  1111  0110,,结果为:0011  1111 1111   1101,即16381;又如10,补码为0000 0000 0000 1010,10>>>2的补码为000000 0000 0000 10,结果为2。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值