【Java】进制转换、二进制原码反码补码和位运算

目录

一、概述

二、进制转换

三、原码反码补码

正数

负数

四、二进制逻辑运算(位运算Bit Wise Operation)

&

|

~

^

>>

<<

>>>

 五、长整数与短整数转换

(1)短——>长

正数

负数

(2)长——>短


一、概述

  • 二进制:基数是2,有2个不同的数学符号,即0和1
  • 八进制:基数是8,有8个不同的数学符号,即0-7
  • 十进制:基数是10,有10个不同的数学符号,即0-9
  • 十六进制:基数是16,有16个不同的数学符号,即0-9,A-F

二、进制转换

基数×位次幂+

例如:

  • 二进制数:0101:表示1*2^0+0*2^1+1*2^2+0*2^3 = 1+4 = 5
  • 八进制数:047:表示7*8^0+4*8^1+0*8^2 = 7+32 = 39
  • 十进制数:312:表示2*10^0+1*10^1+3*10^2
  • 十六进制数:0xAF:表示F*16^0+A*16^1 = 15+160 = 175

  • 二进制和八进制转换:3位二进制等于1位八进制,以421相加,相拼
  • 二进制和十进制转换:除2求余法。对应2次幂数相加,相拼
  • 二进制和十六进制转换:4个二进制等于1个十六进制,以8421相加,相拼
  • 转换为十进制:先转换为二进制,再由二进制数每一位乘二次幂数相加

三、原码反码补码

  • 正数

最高位为0的是正数,正数的原码反码补码都相同

原码:0000 0111   

反码:0000 0111 

补码:0000 0111 

  • 负数

最高位为1的是负数

原码:1000 0111

反码:1111 1000(除符号位不变,其余取反)

补码:1111 1001(最低位+1)

应用:

①十进制负数转二进制,先求解对应正数,符号位定为1,其余位取反+1,用补码表示。

②二进制负数转十进制。符号位不变,其余为取反+1,得到原码。

四、二进制逻辑运算(位运算Bit Wise Operation)

&

与。遇0则0

|

或。遇1则

~

取反。1-0;0-1

^

异或。同0非1(不进位加)

>>

右移。左边补符号位。

<<

左移。右边补0。

>>>

无符号右移。左边补0。

应用:

①求2的几次方——移位

②两个数换位置(正整数)——位运算(如: a=a^b;b=a^b;a=a^b)

 五、长整数与短整数转换

(1)短——>长

  • 正数

前面全加0

  • 负数

前面全加1

(2)长——>短

直接去掉前面的,会精度丢失。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论
在计算机中,数值表示通常使用二进制,而为了运算和存储,我们需要不同的数表示形式:原码、反码补码。这些方法主要应用于有符号整数,特别是对于负数的表示。 **1. 原码(Unsigned):** - 对于正数,原码就是它的二进制表示。 - 对于负数,原码是在最高位(符号位)为1的情况下,剩下的数不变。 例如,十数-5的原码在二进制中是 `10000101`。因为最高位是1,表示负数。 **2. 反码(One's Complement):** - 正数的反码是其对应的原码。 - 负数的反码是其原码逐位取反(包括符号位),然后加1。 例如,-5的反码是 `11111010`,因为原码是 `10000101`,取反后得到 `01111011`,加1得 `11111010`。 **3. 补码(Two's Complement):** - 补码是计算机中最常用的表示负数的方法。 - 正数的补码等于其原码。 - 负数的补码是其反码加1。 同样,-5的补码是 `11111010`,因为反码 `11111010` 加1等于 `11111011`。 以下是简单的Python代码示例,用于将十转换为这三种表示: ```python def convert_to_binary(num, mode='decimal'): if mode == 'decimal': return format(int(num), '08b') elif mode == 'unsigned': return bin(num)[2:] elif mode == 'ones_complement': return format(~int(num), '08b') elif mode == 'two_complement': return format(int(num) & ~1, '08b') # 使用补码规则 # 示例 decimal_num = 5 print("十:", convert_to_binary(decimal_num)) print("原码:", convert_to_binary(decimal_num, 'unsigned')) print("反码:", convert_to_binary(decimal_num, 'ones_complement')) print("补码:", convert_to_binary(decimal_num, 'two_complement')) ``` 如果你对这些概念或代码有任何疑问,请告诉我,我会一步解释或者提供相关的问题供你深入学习。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cakeAndAle

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值