【Java基础】位运算符与原码,补码,反码

目录

 

计算机进制基础

位运算符

原码,补码和反码


计算机进制基础

计算机汇编语言中,计算进制分为四种:二进制,八进制,十进制和十六进制

二进制 B (binary)

逢二进一,基数为2,数值部分用两个不同的数字0、1来表示。

示例:7 = 0b0111,0b表示二进制
八进制 O (octal)

逢八进一,基数为8,数值部分分别用0,1,2,3,4,5,6,7来表示。

示例:10=012,第一位补0表示八进制
十进制 D (decimal)

逢十进一,基数为10,数值部分分别用0,1,2,3,4,5,6,7,8,9来表示。

示例:11=11,我们数学运算中最常用的进制
十六进制 H (hexadecimal)

逢十六进一,基数为16,数值部分用十进制表示0~9,用A,B,C,D,E,F表示10~15。

示例:30=0X1E,0X前缀表示十六进制

小技巧

Windows系统打开计算器(win+r输入calc),选择程序员

输入一个数字得出不同进制的计算结果

位运算符

Java位运算符分为两类:位逻辑运算和移位运算

位逻辑运算符(4个):

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

移位运算符(3个):

  1. 左移(<<)
  2. 右移(>>)
  3. 无符号右移(>>>)
运算符描述
&两位都为1,结果为1,否则为0
|两位都为0,结果为0,否则为1
~两位一个为0,一个为1,结果为1,否则为0
^数字反转,0变成1,1变成0
<<低位溢出,符号位不变,并用符号位补溢出的高位
>>符号位不变,低位补0
>>>低位溢出,高位补0

原码,补码和反码

机器数:一个数在计算机的存储形式是二进制数,我们称这些二进制数为机器数,机器数是有符号,在计算机中用机器数的最高位存放符号位,0表示正数,1表示负数。

原码

原码表示的数值与机器数一样,即原码就是计算机的二进制数

+1 = 0000 0001   最高位的0表示正数

-1  = 1000 0001  最高位的1表示负数

反码

反码的表示方式分为以下两种:

  • 正数的补码=原码
  • 负数的补码=最高位符号位不变,其他位取反

+1的反码 = +1的原码 = 0000 0001

-1的反码 = 1111 1110

补码

补码的表示方式分为以下两种:

  • 正数的补码=原码
  • 负数的补码=负数的反码+1

+1的补码 = +1的原码 = 0000 0001

-1的补码 = -1的反码 + 1 = 1111 1110 + 1 = 1111 1111

总结以下:

  1. 二进制的最高位是符号位,0表示正数,1表示负数
  2. 正数的原码=反码=补码
  3. 负数的反码=原码符号位不变,其他位取反
  4. 负数的补码=负数的反码+1,反之,负数的反码=负数的补码-1
  5. 0的反码和补码都是0
  6. 计算机内存中做运算时都是通过补码进行运算的,得出的结果再转成原码才是我们前台输出的结果

关于上面的几点,我们通过位逻辑运算符做一些简单例子演示

求出2 & 3的结果

  1. 求出2的原码:原码 = 0000 0010
  2. 上述规则2可得出,2的补码 = 2的原码 = 0000 0010
  3. 求出3的原码:原码 = 0000 0011
  4. 上述规则2可得出,3的补码 = 3的原码 = 0000 0011
  5. 根据规则6,计算机中做运算都是通过补码来进行运算的,即:
  6. 2 & 3 = 2的补码 & 3的补码 =0000 0010 & 0000 0011 = 0000 0010
  7. 0000 0010是我们计算后的补码结果,根据规则1和2得出原码也是相同的,再将我们的原码转成十进制得出的结果为2

求出~-2的结果

  1. 求出-2的原码:原码 = 1000 0010
  2. 根据规则3计算出反码,-2的反码 = 1111 1101
  3. 根据规则4计算出补码,-2的补码= -2的反码+1 = 1111 1101 + 0000 0001 = 1111 1110
  4. 根据规则6对计算出的补码进行运算,~1111 1110 = 0000 0001
  5. 0000 0001是我们计算后的补码结果,根据规则1和2得出原码也是相同的,再将我们的原码转成十进制得出的结果为1

最后给个练习题:计算~2的结果?

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值