JAVA 的进制的转换,源码,反码和补码

本文详细介绍了Java中各种进制转换为十进制的方法,包括二进制、八进制和十六进制。同时,文章还探讨了机器码、原码、反码和补码的概念及其在计算机中的应用,讲解了负数在不同码制间的表示方式。最后,简单提及了递归算法的基本结构和理解要点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

方法 Method,function
java的方法是一段用来完成特定功能的代码片段
定义成方法后,复用特别特别方便
方法的输入时参数列表(方法名后面括号里的,形参),输出是返回值
return 返回方法需要的值,并结束方法的运行
java中的方法传递只有 值传递,没有引用传递

1.任何进制到十进制的转换
156 = 1*10^2+5*10^1+3*10^0=156
0b1101 = 1*2^3+1*2^2+0*2^1+1*2^0=13
0764 = 7*8^2+6*8^1+4*8^0=500
0xb4 = 11*16^1+4*16^0=180
2.其他进制到10进制的转换
binary:除2取余数,逆序输出
octal:除8取余数,逆序输出
hexadecimal:除16取余数,逆序输出
binary 78 = 78/2=余0,39/2=余1,19/2=余1,9/2=余1,4/2余0,2/2余0,1/2=0余1,
逆序输出=1001110
octal 78 = 78/8=余6,9/8=余1,1/8=0余1;
逆序输出116
hexadecimal 78 = 78/16=4余14,4/16=0余4
逆序输出4e ,除不开余本身
3.八进制转二进制
规则:一个8进制表示成3个二进制位,3个二进制位合成一个进制位
101010 转8,101=5,010=2,8进制数=52;
63转 2进制,110=6,011=3,110011
十六进制和二进制的转换
规则:一个十六进制表示称为4个二进制,4个二进制位合成一个十六进制
0xd7 转2进制,13=1101,7=0111,二进制11010111
机器码——原码——反码——补码
机器码:
最高位为符号位,其他位为数值位
10: 0000 1010 -10: 1000 1010
计算机并不是用原码来表示数据的
缺点:1,原码有+0和-0的区分,0000 0000 1000 0000
2. 如果考虑符号位参与运算,那么在设计CPU的时候会复杂很多
反码:
规则: 正数,和原码和反码一致
负数,在原码的基础上,符号位不变,其他0变1,1变0取反
EG: 10: 0000 1010 反码 0000 1010
-10: 1000 1010 反码 1111 0101
补码:
规则:正数,三码合一,不变
负数,先求原码,然后反码,最后+1
-10: 1111 0101 +1 1111 0110
-1: 1111 1110 +1 1111 1111
补码的补码就是原码
递归算法详解
自己调用自己就是递归;
递归结构包括两个部分:
定义递归头:什么时候不调用自身方法
定义递归体:什么时候需要调用自身方法
递归说白了就是一个if else循环
<think>嗯,用户现在问的是源码反码补码的解释。之前他们问了如何用Java拆分四位数,现在转向计算机基础,可能是在学习编程或者计算机组原理。我需要先确认用户的基础,可能他们刚开始接触这些概念,需要简明易懂的解释。 首先,用户可能不太清楚这些编码的用途,为什么需要反码补码?我得先讲清楚这些编码出现的背景,比如计算机如何处理正负数,以及补码在运算中的优势。 源码是最直观的表示,但遇到负数时,直接加减会有问题。比如,1 + (-1) 用源码的话,结果可能不对。这时候就需要反码补码来解决符号位参与运算的问题。特别是补码,现在计算机普遍使用补码,因为它统一了加减法,不需要额外的电路处理符号位。 接下来需要分步骤解释每个编码的定义,最好结合例子。比如,用4位二进制数,正数负数分别怎么表示。例子要具体,比如+5-5的原码、反码补码是什么,这样用户更容易理解。 还要注意反码补码转换步骤,比如反码是原码符号位不变,其他位取反;补码则是反码加1。这些步骤需要详细说明,避免混淆。 用户可能还会疑惑为什么要有补码,所以需要解释补码的优势,比如解决了0的表示问题,简化运算。比如,补码中0只有一种表示,而原码反码会有+0-0,这样更容易出错。 另外,补码的运算例子也很重要,比如用补码计算减法,如何转换加法,这样可以说明补码如何简化计算机的硬件设计。 最后,要提醒用户现在计算机使用补码,以及这些编码的应用场景,比如数据传输存储。可能用户在学习相关课程或者准备面试,需要这些基础知识。 需要检查是否有错误,比如原码的符号位是否正确,反码补码转换过程是否准确。另外,例子是否正确,比如4位二进制数中-5的补码应该是1011吗?可能需要再核对一下。例如,4位下,-5的原码应该是1101,反码是1010,补码是1011,对吗?是的,因为符号位是1,其他位取反再加1。 总结下来,回答的结构应该是:背景介绍,每个编码的定义例子,转换步骤,补码的优势,以及应用总结。这样用户能够逐步理解这些概念,并且知道它们的重要性。</think>以下是关于**原码、反码补码**的详细解释,以帮助理解计算机中数值的存储运算原理: --- ### **1. 背景** 计算机使用二进制表示数值,但需处理**正负数****运算简化**问题。原码、反码补码是三种编码方式,其中**补码**是现代计算机普遍采用的方案。 --- ### **2. 原码(Sign-Magnitude)** #### **定义** - 最高位为**符号位**:`0`表示正数,`1`表示负数。 - 其余位为数值的绝对值。 #### **示例** - 以4位二进制为例: - $+5$ → `0`**`101`** - $-5$ → `1`**`101`** #### **问题** - **加减法复杂**:符号位需单独处理,无法直接参与运算。 - **存在`+0``-0`**:`0000``1000`均表示0,导致冗余。 --- ### **3. 反码(Ones' Complement)** #### **定义** - **正数**:与原码相同。 - **负数**:符号位不变,其余位按位取反(`0`变`1`,`1`变`0`)。 #### **示例** - $+5$ → `0`**`101`** $-5$ → `1`**`010`**(原码`1101`取反) #### **问题** - **运算需修正**:若最高位产生进位,需将进位加到结果末尾(循环进位)。 - **仍存在`+0``-0`**:`0000``1111`均表示0。 --- ### **4. 补码(Two's Complement)** #### **定义** - **正数**:与原码相同。 - **负数**:在反码基础上**加1**(符号位参与运算)。 #### **示例** - $+5$ → `0`**`101`** $-5$ → `1`**`011`**(反码`1010` + `1`) #### **优势** - **统一加减法**:减法可转换为加法(例如:$5 - 3 = 5 + (-3)$)。 - **消除`-0`**:补码中`0000`唯一表示0,`1111`表示`-1`。 - **简化硬件设计**:无需额外处理符号位。 #### **补码运算示例** - 计算 $5 - 3$(4位二进制): 1. 补码表示:$5$ → `0101`,$-3$ → `1101` 2. 相加:`0101 + 1101 = 1 0010`(最高位溢出,结果为`0010`,即十进制`2`) --- ### **5. 总结** | **编码方式** | **正数规则** | **负数规则** | **特点** | |--------------|---------------------|------------------------------|-----------------------------| | **原码** | 符号位+绝对值 | 符号位+绝对值 | 直观,但运算复杂 | | **反码** | 符号位+绝对值 | 符号位+绝对值取反 | 需循环进位,存在双零 | | **补码** | 符号位+绝对值 | 符号位+绝对值取反后加1 | 统一加减法,无冗余,效率高 | --- ### **6. 应用场景** - **补码**:现代计算机统一使用补码存储整数。 - **原码/反码**:仅用于理论理解或特定场景(如浮点数的阶码)。 --- 通过补码,计算机实现了高效的算术运算,同时解决了符号处理零冗余的问题。这是计算机底层设计的核心基础之一。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值