进制转换编程报告
进制转换 实验报告
进制转换实验报告进制转换实验报告一、引言进制转换是计算机科学中非常基础的概念之一。
在计算机科学中,常见的进制有二进制、八进制、十进制和十六进制。
本次实验旨在通过实际操作,深入理解进制转换的原理和方法,并通过实验结果验证理论的正确性。
二、实验目的1. 掌握二进制、八进制、十进制和十六进制的表示方法;2. 理解进制转换的原理和方法;3. 验证进制转换的正确性。
三、实验过程1. 二进制转十进制通过实验我们发现,二进制数的每一位上的数值都是2的幂次方。
例如,二进制数1011转换为十进制数的计算过程如下:1 * 2^3 + 0 * 2^2 + 1 * 2^1 + 1 * 2^0 = 8 + 0 + 2 + 1 = 11通过多次实验,我们验证了二进制转换为十进制的方法的正确性。
2. 十进制转二进制十进制数转换为二进制数的方法是不断除以2,将余数从下往上排列。
例如,将十进制数11转换为二进制数的计算过程如下:11 / 2 = 5 余 15 / 2 = 2 余 12 / 2 = 1 余 01 /2 = 0 余 1将余数从下往上排列,得到二进制数1011。
通过多次实验,我们验证了十进制转换为二进制的方法的正确性。
3. 八进制和十六进制的转换八进制和十六进制的转换方法与二进制和十进制类似,只是基数不同。
八进制的基数为8,十六进制的基数为16。
通过实验,我们发现八进制和十六进制的转换方法也是非常简单和直观的。
四、实验结果通过多次实验,我们成功地将二进制、八进制、十进制和十六进制相互转换,并验证了转换方法的正确性。
实验结果表明,进制转换是可靠和准确的。
五、实验总结通过本次实验,我们深入理解了进制转换的原理和方法,并通过实际操作验证了理论的正确性。
进制转换在计算机科学中具有重要的意义,它不仅在计算机编程中得到广泛应用,还在计算机底层的存储和处理中起到关键作用。
掌握进制转换的方法,对于理解计算机科学的其他概念和算法也非常有帮助。
汇编代码.386将十进制按位转换成为二进制互相转化实验报告
汇编代码.386将十进制按位转换成为二进制互相转化实验报告全文共四篇示例,供您参考第一篇示例:引言汇编语言是一种底层的计算机语言,它直接面向计算机的硬件和指令集架构。
在计算机科学领域中,对汇编语言的理解和掌握是非常重要的,因为它可以帮助程序员更深入地理解计算机系统的工作原理。
本文将围绕着汇编语言中的十进制到二进制的转换,展开一项实验报告,通过编写汇编代码.386实现十进制和二进制的相互转换,并对实验结果进行分析和总结。
实验目的1. 了解汇编语言中的数据处理、位操作等基本概念和指令;2. 掌握利用汇编语言将十进制数字转换为二进制数,并将二进制数转换为十进制数的方法;3. 加深对计算机底层原理的理解,提高汇编语言编程能力。
实验过程1. 十进制转为二进制我们使用汇编语言编写代码,将给定的十进制数字转换为二进制数。
我们可以选择一个整数N作为输入,然后使用位操作指令将其转换为对应的二进制数。
在汇编语言中,可以使用移位操作来实现这一转换。
我们可以将整数N的每一位通过移位操作得到对应的二进制位,直到整个数转换完成。
2. 二进制转为十进制接下来,我们利用汇编语言编写代码,实现将给定的二进制数转换为十进制数的功能。
对于一个二进制数,我们可以通过相应的位操作和乘法操作将其转换为对应的十进制数。
具体来说,我们可以取得二进制数的每一位,并将其乘以相应位数的权值,然后求和得到十进制数。
实验结果在实验过程中,我们成功地编写了汇编代码.386来实现十进制和二进制的相互转换。
通过实际的测试和验证,我们得到了正确的转换结果。
这证明了我们的汇编代码在功能上是正确的,能够准确地进行十进制和二进制之间的转换。
实验总结通过这次实验,我们深入探讨了汇编语言中的数据处理和位操作等基本概念。
我们不仅了解了如何使用汇编语言进行十进制和二进制的转换,还加深了对计算机底层原理的理解。
我们也发现了汇编语言在实现这种功能上的高效性和灵活性。
结论本次实验通过汇编代码.386将十进制按位转换成为二进制,并实现了二进制到十进制的互相转化。
实验报告数制转换
一、实验目的1. 掌握数制转换的基本概念和原理;2. 熟练运用数制转换的方法,实现不同数制之间的转换;3. 培养学生的逻辑思维能力和动手操作能力。
二、实验原理数制转换是指将一个数从一个数制转换到另一个数制的过程。
常见的数制有十进制、二进制、八进制和十六进制。
以下是几种常见数制之间的转换方法:1. 二进制与十进制之间的转换(1)二进制转十进制:将二进制数按位权展开求和;(2)十进制转二进制:不断除以2,取余数,直到商为0,将余数倒序排列。
2. 八进制与十进制之间的转换(1)八进制转十进制:将八进制数按位权展开求和;(2)十进制转八进制:不断除以8,取余数,直到商为0,将余数倒序排列。
3. 十六进制与十进制之间的转换(1)十六进制转十进制:将十六进制数按位权展开求和;(2)十进制转十六进制:不断除以16,取余数,直到商为0,将余数倒序排列,不足四位的在前面补0。
4. 二进制与八进制之间的转换(1)二进制转八进制:将二进制数每三位分成一组,每组对应一个八进制数;(2)八进制转二进制:将八进制数每位转换成三位二进制数。
5. 二进制与十六进制之间的转换(1)二进制转十六进制:将二进制数每四位分成一组,每组对应一个十六进制数;(2)十六进制转二进制:将十六进制数每位转换成四位二进制数。
三、实验仪器与材料1. 计算机2. 文档编辑软件(如Microsoft Word)四、实验步骤1. 在计算机上打开文档编辑软件,创建一个新的文档。
2. 将以下数制转换题目依次输入文档中:(1)将二进制数1101转换为十进制数;(2)将十进制数21转换为二进制数;(3)将八进制数27转换为十进制数;(4)将十进制数36转换为八进制数;(5)将十六进制数1A转换为十进制数;(6)将十进制数156转换为十六进制数;(7)将二进制数10110111转换为八进制数;(8)将八进制数532转换为二进制数;(9)将二进制数11011011转换为十六进制数;(10)将十六进制数A3C转换为二进制数。
进制转换_实验报告
一、实验目的1. 理解不同进制之间的转换原理。
2. 掌握二进制、八进制、十进制和十六进制之间的相互转换方法。
3. 培养实际操作能力和逻辑思维能力。
二、实验原理进制转换是计算机科学和数字电路中的基本概念。
常见的进制有二进制、八进制、十进制和十六进制。
它们之间的转换主要基于位权原理。
- 二进制:基数为2,只有0和1两个数字,每一位的值是2的幂次方。
- 八进制:基数为8,每一位的值是8的幂次方。
- 十进制:基数为10,每一位的值是10的幂次方。
- 十六进制:基数为16,每一位的值是16的幂次方,其中A-F表示10-15。
三、实验器材- 计算机- 文档编辑软件(如Microsoft Word)四、实验步骤1. 二进制转十进制- 将二进制数按照位权原理进行计算。
- 例如,二进制数1101转换为十进制:\(1 \times 2^3 + 1 \times 2^2 + 0 \times 2^1 + 1 \times 2^0 = 8 + 4 + 0 + 1 = 13\)。
2. 十进制转二进制- 使用除以2的方法,将十进制数不断除以2,记录余数。
- 将余数从下到上排列,得到二进制数。
- 例如,十进制数13转换为二进制:\(13 \div 2 = 6\) 余 1,\(6 \div 2 = 3\) 余 0,\(3 \div 2 = 1\) 余 1,\(1 \div 2 = 0\) 余 1,所以13的二进制为1101。
3. 八进制转十进制- 将八进制数按照位权原理进行计算。
- 例如,八进制数123转换为十进制:\(1 \times 8^2 + 2 \times 8^1 + 3 \times 8^0 = 64 + 16 + 3 = 83\)。
4. 十进制转八进制- 使用除以8的方法,将十进制数不断除以8,记录余数。
- 将余数从下到上排列,得到八进制数。
- 例如,十进制数83转换为八进制:\(83 \div 8 = 10\) 余 3,\(10 \div 8 = 1\) 余 2,\(1 \div 8 = 0\) 余 1,所以83的八进制为123。
进制转换实训报告
一、实训目的1. 理解不同进制之间的转换原理;2. 掌握二进制、八进制、十进制、十六进制之间的转换方法;3. 提高进制转换的实际操作能力。
二、实训内容1. 理解进制概念及进位制;2. 掌握二进制、八进制、十进制、十六进制之间的转换;3. 实现进制转换程序设计。
三、实训过程1. 理解进制概念及进位制进制是指用若干个不同的数字符号来表示数值的方法。
进位制是进制的一种,指用整数幂次表示数值的方法。
常见的进位制有二进制、八进制、十进制和十六进制。
2. 掌握不同进制之间的转换(1)二进制与十进制的转换二进制转十进制:将二进制数按权展开,然后将结果相加。
例:二进制数 1101 转换为十进制数:1×2^3 + 1×2^2 + 0×2^1 + 1×2^0 = 8 + 4 + 0 + 1 = 13十进制转二进制:将十进制数除以2,取余数,直到商为0,将余数倒序排列即为二进制数。
例:十进制数 13 转换为二进制数:13 ÷ 2 = 6 余 16 ÷ 2 = 3 余 03 ÷ 2 = 1 余 11 ÷2 = 0 余 1将余数倒序排列:1101(2)八进制与十进制的转换八进制转十进制:将八进制数按权展开,然后将结果相加。
例:八进制数 17 转换为十进制数:1×8^1 + 7×8^0 = 8 + 7 = 15十进制转八进制:将十进制数除以8,取余数,直到商为0,将余数倒序排列即为八进制数。
例:十进制数 15 转换为八进制数:15 ÷ 8 = 1 余 71 ÷ 8 = 0 余 1将余数倒序排列:17(3)十六进制与十进制的转换十六进制转十进制:将十六进制数按权展开,然后将结果相加。
例:十六进制数 A3 转换为十进制数:A×16^1 + 3×16^0 = 10×16 + 3 = 160 + 3 = 163十进制转十六进制:将十进制数除以16,取余数,直到商为0,将余数转换为十六进制数,然后倒序排列即为十六进制数。
进制实验报告
一、实验目的1. 理解不同进制之间的转换方法;2. 掌握二进制、八进制、十进制、十六进制之间的转换;3. 培养实际操作能力,提高进制转换的熟练程度。
二、实验原理进制是指用一组固定的符号和规则来表示数值的方法。
常见的进制有二进制、八进制、十进制和十六进制。
二进制使用0和1两个数字表示,八进制使用0-7表示,十进制使用0-9表示,十六进制使用0-9和A-F表示。
进制之间的转换方法如下:1. 二进制转十进制:将二进制数按位权展开求和;2. 十进制转二进制:将十进制数不断除以2,记录余数,倒序排列得到二进制数;3. 二进制转八进制:将二进制数每三位一组,转换成对应的八进制数;4. 八进制转二进制:将八进制数每三位一组,转换成对应的二进制数;5. 十进制转八进制:将十进制数不断除以8,记录余数,倒序排列得到八进制数;6. 八进制转十进制:将八进制数按位权展开求和;7. 十进制转十六进制:将十进制数不断除以16,记录余数,倒序排列得到十六进制数;8. 十六进制转十进制:将十六进制数按位权展开求和。
三、实验仪器与材料1. 计算机;2. 实验指导书;3. 实验报告纸。
四、实验步骤1. 将给定的二进制数转换成十进制数;2. 将给定的十进制数转换成二进制数;3. 将给定的二进制数转换成八进制数;4. 将给定的八进制数转换成二进制数;5. 将给定的十进制数转换成八进制数;6. 将给定的八进制数转换成十进制数;7. 将给定的十进制数转换成十六进制数;8. 将给定的十六进制数转换成十进制数。
五、实验数据及结果1. 二进制转十进制:- 给定二进制数:1101- 转换结果:13(十进制)2. 十进制转二进制:- 给定十进制数:45- 转换结果:101101(二进制)3. 二进制转八进制:- 给定二进制数:1101010- 转换结果:215(八进制)4. 八进制转二进制:- 给定八进制数:123- 转换结果:111101(二进制)5. 十进制转八进制:- 给定十进制数:58- 转换结果:72(八进制)6. 八进制转十进制:- 给定八进制数:72- 转换结果:58(十进制)7. 十进制转十六进制:- 给定十进制数:255- 转换结果:FF(十六进制)8. 十六进制转十进制:- 给定十六进制数:FF- 转换结果:255(十进制)六、实验总结通过本次实验,我们掌握了不同进制之间的转换方法,提高了进制转换的熟练程度。
研究报告进制转换(二进制八进制十进制十六进制)
进制转换(二进制八进制十进制十六进制)1、二进制数、八进制数、十六进制数转十进制数有一个公式:二进制数、八进制数、十六进制数的各位数字分别乖以各自的基数的(N-1)次方,其和相加之和便是相应的十进制数。
个位,N=1;十位,N=2...举例:110B=1*2的2次方+1*2的1次方+0*2的0次方=0+4+2+0=6D110Q=1*8的2次方+1*8的1次方+0*8的0次方=64+8+0=72D110H=1*16的2次方+1*16的1次方+0*16的0次方=256+16+0=272D2、十进制数转二进制数、八进制数、十六进制数方法是相同的,即整数部分用除基取余的算法,小数部分用乘基取整的方法,然后将整数与小数部分拼接成一个数作为转换的最后结果。
例:见四级指导16页。
3、二进制数转换成其它数据类型3-1二进制转八进制:从小数点位置开始,整数部分向左,小数部分向右,每三位二进制为一组用一位八进制的数字来表示,不足三位的用0补足,就是一个相应八进制数的表示。
010110.001100B=26.14Q八进制转二进制反之则可。
3-2二进制转十进制:见13-3二进制转十六进制:从小数点位置开始,整数部分向左,小数部分向右,每四位二进制为一组用一位十六进制的数字来表示,不足四位的用0补足,就是一个相应十六进制数的表示。
00100110.00010100B=26.14H十进制转各进制要将十进制转为各进制的方式,只需除以各进制的权值,取得其余数,第一次的余数当个位数,第二次余数当十位数,其余依此类推,直到被除数小于权值,最后的被除数当最高位数。
一、十进制转二进制如:55转为二进制2|5527――1 个位13――1 第二位6――1 第三位3――0 第四位1――1 第五位最后被除数1为第七位,即得110111二、十进制转八进制如:5621转为八进制8|5621702 ―― 5 第一位(个位)87 ―― 6 第二位10 ―― 7 第三位1 ――2 第四位最后得八进制数:127658三、十进制数十六进制如:76521转为十六进制16|765214726 ――5 第一位(个位)295 ――6 第二位18 ――6 第三位1 ――2 第四位最后得1276516二进制与十六进制的关系2进制0000 0001 0010 0011 0100 0101 0110 011116进制0 1 2 3 4 5 6 72进制1000 1001 1010 1011 1100 1101 1110 111116进制8 9 a(10) b(11) c(12) d(13) e(14) f(15)可以用四位数的二进制数来代表一个16进制,如3A16 转为二进制为:3为0011,A 为1010,合并起来为00111010。
堆栈进制转换实验报告
一、实验目的1. 理解堆栈的基本原理和操作。
2. 掌握利用堆栈实现进制转换的方法。
3. 提高编程能力,培养问题解决能力。
二、实验环境1. 操作系统:Windows 102. 编程语言:C++3. 开发工具:Visual Studio 2019三、实验原理进制转换是将一个数从一种进制表示转换为另一种进制表示的过程。
例如,将十进制数转换为二进制数、十六进制数等。
堆栈是一种先进后出(FILO)的数据结构,可以用来实现进制转换。
进制转换的原理如下:1. 将十进制数转换为任意进制数,需要不断除以目标进制,直到商为0。
2. 将每次除法得到的余数存储在堆栈中,最后从堆栈中取出余数,倒序输出即为转换后的结果。
四、实验步骤1. 定义一个堆栈结构体,包含栈顶指针、栈底指针、栈大小和栈元素。
2. 实现堆栈的基本操作,如初始化、入栈、出栈和判断是否为空。
3. 编写进制转换函数,将十进制数转换为任意进制数。
4. 编写主函数,实现用户输入、进制转换和输出转换结果。
五、实验代码```cpp#include <iostream>#include <stack>using namespace std;// 堆栈结构体定义template <typename T>struct Stack {T base;T top;int size;int capacity;};// 初始化堆栈template <typename T>void initStack(Stack<T>& s, int capacity) { s.base = new T[capacity];s.top = s.base;s.size = 0;s.capacity = capacity;}// 入栈template <typename T>bool push(Stack<T>& s, T element) {if (s.size >= s.capacity) {return false;}s.top = element;s.top++;s.size++;return true;}// 出栈template <typename T>bool pop(Stack<T>& s, T& element) { if (s.size <= 0) {return false;}s.top--;element = s.top;s.size--;return true;}// 判断堆栈是否为空template <typename T>bool isEmpty(Stack<T>& s) {return s.size == 0;}// 十进制数转换为任意进制数template <typename T>void decimalToBase(T decimal, int base) { stack<T> resultStack;while (decimal > 0) {resultStack.push(decimal % base); decimal /= base;}while (!resultStack.empty()) {T element;pop(resultStack, element);cout << element;}cout << endl;}int main() {int decimal;int base;cout << "请输入十进制数:";cin >> decimal;cout << "请输入目标进制(2-16):"; cin >> base;if (base < 2 || base > 16) {cout << "目标进制无效!" << endl;return 0;}cout << "转换后的" << base << "进制数为:";decimalToBase(decimal, base);return 0;}```六、实验结果与分析1. 当输入十进制数65和进制8时,程序输出101,符合预期。
微机实验三-进制转换实验报告
计算机科学与技术系实验报告专业名称计算机科学与技术课程名称微机原理与接口技术项目名称进制转换实验班级学号姓名同组人员无实验日期 2016/06/28一、实验目的与要求1、熟悉二进制、十进制、十六进制转换规则。
2、熟悉算术运算指令及移位指令的运用。
二、实验逻辑原理图与分析(汇编—流程图)2.1 画实验逻辑原理图三、程序分析1、十进制转二进制(此处时代码,但是由于上传问题,学生可以自己添加)将存放转换后的二进制数值,并通过移位的方式将寄存器中的每一位转换成对应的字符显示出来就成了对应的二进制。
2、二进制转十进制(此处也是代码,只要把代码复制进去就行。
也可以私聊我,我分享代码给你们。
)用系统功能调用将上面程序除出来的每一位转换成字符输出到显示器上来,从而完成2进制向10进制的转黄。
四、实验数据和结果分析4.1 实验结果数据二进制转十进制实验结果: 00001111B=15D;十进制转二进制实验结果:27D=00011011B;十六进制转十进制的实验结果:0011H=17D4.2 结果数据分析二进制转十进制结果分析:((0*2+1)*2+1)*2+1)*2+1=15;十进制转二进制结果分析:该数在计算机是以二进制形式存储的,即0,1,每次输出时,根据最高位判断一下是1还是0;十六进制转十进制结果分析:(0*16+1)*16+1=17五、实验问题分析、思考题与小结在实验过程中,我们发现对于16位的10转2中,其高位会出错通过检测盘查发现,错误出在对于寄存器的界限上以及高低位的使用上有问题。
本次实验过程中,我们进一步了解的系统功能调用,如从键盘上输入字符以及从显示器上显示对应的字符。
了解了在汇编语言中如何实现子函数调用,利用call 指令调用对应的函数,从而减少程序的重复性以及方便程序的可读性。
在整体实验中熟悉了移位指令,算术指令以及堆栈相关的指令,对于这些指令的用法进一步了解了。
并通过在编写程序中出现的错误加深了自身的编程习惯。
数之间相互转化汇编实验报告
数之间相互转化一、程序设计要求1.转化内容选择下列一项:二进制数→十六进制数显示,二进制数→十进制数显示,十进制数→二进制数显示,十进制数→十六进制数显示,十六进制数→二进制数显示。
2.给出适当的文字提示3.程序要求保护措施,对于非法键入不受理,但回显,显示错误信息。
4.具体显示格式,例如:0111100010011010=789AH二、程序设计思路程序实现功能:1.提示用户输入小于10000的十进制数;2.判断输入是否合法,在输入非法时给出错误信息;3.将用户输入小于10000的十进制数其以十六进制形式输出。
主程序设计思路:第一步:调用INT21的0A号功能等待用户键入一串字符串,要求用户输入小于10000的十进制数即输入字符个数不能超过4,并将输入字符串送入数据缓冲区;第二步:判断输入的字符串长度是否超过4,若超过则输出错误信息,返回DOS;若没有超过继续;第三步:将用户输入的十进制数转化成二进制数保存;第四步:将二进制数转化为十六进制数保存;第五步:输出十六进制数;输入十进制数转化成二进制数的设计思路:第一步:判断输入的字符串是否为十进制数,若字符串中有不是数字的立即退出;第二步:将输入的字符串中的各字符转化成数字,由此得到十进制数各位上的数;第三步:通过1000千位数字百位数字100+十位数字10+个位数字求得该十进⨯+⨯⨯制数,存在于计算机中即为二进制数。
二进制数转化成十六进制数的设计思路:第一步:定义一个4个字节的单元用来存放十六进制形式;第二步:将二进制数存入DX寄存器中,将EDX寄存器中的数左移十六位,将十六位二进制数全部置于EDX的高十六位;第三步:将置于EDX高十六位的数从高位开始,每次取出四位数,并将其转化成字符存于存储单元,直至十六位数全部转化完。
其中,每次取四位数是通过循环左移四位数到DL的低四位实现的。
三、程序设计流程图开始显示操作提示输入字符串->BUF1光标移至输入的字符串后实际键入字符个数->CX调用S_N2ASCCX>4?调用N10_N2ASC输出十六进制数显示错误信息结束返回DOSNY主程序流程图AX->DX将EDX 算术左移16位BUF2+1->SI 4->COUNT将EDX 循环左移4位DL 高4为清零DL>=10DL+7->DLDL+30->DL SI+1->SI COUNGT 减1COUNT=0?返回主程序YYNN子程序N2_16ASC流程图BUF1+2地址->SI0->AX[SI]->BLBL>=3AH?BL<30H?BL-30H->BL 0->BHCALL MUL10SI+1->SI CX-1->CXCX=0?显示错误信息返回DOS返回主程序NY YNYN子程序S_N2ASC流程图四、源程序;--------------------------------------------------------------------------------------------------------------------- ;程序功能:将用户输入小于10000的十进制数其以十六进制形式输出;---------------------------------------------------------------------------------------------------------------------.486 DA TASEGMENT USE16 ;数据段MESG1 DB 'Please enter a decimal number less than 10000!',0DH,0AH,'$' MESG2 DB 0DH,0AH,'Error! Y our input is larger than 10000!',0DH,0AH,'$' MESG3 DB 0DH,0AH,'Error! Y our input is not a number!',0DH,0AH,'$' BUF1 DB 6DB ?DB 6 DUP(?)BUF2 DB '=',4 DUP(?),'H $' COUNT DB 4DA TA ENDS;---------------------------------------------------------------------------------------------------------------------CODE SEGMENT USE16 ;代码段ASSUME CS:CODE,DS:DA TABEG: ;数据段初始化MOV AX,DA TAMOV DS,AXMOV AH,9 ;显示操作提示MOV DX,OFFSET MESG1INT 21H;等待键入一个不超过4位的十进制数MOV AH,0AHMOV DX,OFFSET BUF1INT 21HMOV AH,3 ;读取光标当前的位置MOV BH,0INT 10HMOV CL,BUF1+1 ;实际键入字符个数->CXMOV CH,0;将光标预置到用户输入的字符后MOV AH,2ADD DL,CLINT 10H;判断输入的字符是否超过4个CMP CX,5JNC ERROR1CALL S_N2ASC ;调用S_N2ASC;将输入的十进制数转换成二进制数CALL N2_16ASC ;调用N2_16ASC;将二进制数转换成十六进制数MOV AH,9 ;输出BUF2的内容MOV DX,OFFSET BUF2INT 21HJMP EXITERROR1: ;显示错误信息MOV AH,9MOV DX,OFFSET MESG2INT 21HEXIT:MOV AH,4CHINT 21H;---------------------------------------------------------------------------------------------------------------------;子程序功能:实现AX*10+BX->AX;---------------------------------------------------------------------------------------------------------------------MUL10 PROCMOV DX,10MUL DXADD AX,BXRETMUL10 ENDP;---------------------------------------------------------------------------------------------------------------------;子程序功能:将输入的十进制数的字符串转换成二进制数;---------------------------------------------------------------------------------------------------------------------S_N2ASC PROCMOV SI,OFFSET BUF1+2MOV AX,0 ;AX清零AGIN:MOV BL,[SI]CMP BL,3AH ;判断输入的字符是否是'0'~'9',若不是转JNC ERROR2CMP BL,30HJC ERROR2SUB BL,30H ;字符转成ACSII码MOV BH,0CALL MUL10 ;完成AX*10+BX->AXINC SILOOP AGINJMP WELL ;成功转换转WELLERROR2:MOV AH,9 ;显示错误信息并返回DOSMOV DX,OFFSET MESG3INT 21HMOV AH,4CHINT 21HWELL: RETS_N2ASC ENDP;---------------------------------------------------------------------------------------------------------------------;子程序功能:将DX中的二进制数转十六进制ACSII码;---------------------------------------------------------------------------------------------------------------------N2_16ASC PROCMOV DX,AXSAL EDX,16 ;左移16位,为实现从高位取4位数准备MOV SI,OFFSET BUF2+1 ;MESG2+6的地址->SIMOV COUNT,4 ;计数LAST:ROL EDX,4 ;循环左移4位AND DL,0FH ;将DL的高4为清零;保证DL中只存在4位二进制数CMP DL,10 ;将4位的十六进制数转化成ACSII码JC NEXTADD DL,7NEXT:ADD DL,30HMOV [SI],DL ;将得到的ACSII->[SI]INC SIDEC COUNT ;计数JNZ LASTRETN2_16ASC ENDP;---------------------------------------------------------------------------------------------------------------------CODE ENDSEND BEG五、测试用例及结果分析1.运行程序,输入12345时,在屏幕上显示错误信息,如下:结果分析:输入的数超过了10000,故显示以上信息。
数据结构实验报告-栈进制转换
数据结构实验报告-栈进制转换数据结构实验报告栈进制转换一、实验目的本实验旨在通过使用栈这种数据结构,实现不同进制之间的转换,加深对栈的基本概念、操作和应用的理解,提高编程能力和问题解决能力。
二、实验环境操作系统:Windows 10编程语言:C++开发工具:Visual Studio 2019三、实验原理进制转换是将一个数从一种进制表示形式转换为另一种进制表示形式的过程。
常见的进制有二进制、八进制、十进制和十六进制。
栈是一种特殊的线性表,它遵循“后进先出”(Last In First Out,LIFO)的原则。
在进制转换中,可以利用栈来存储转换过程中的余数,从而实现进制的转换。
以十进制转换为二进制为例,将十进制数除以 2 取余数,然后将商继续除以 2 取余数,直到商为 0。
将依次得到的余数从栈中取出,即可得到对应的二进制数。
四、实验内容与步骤(一)数据结构定义```cppclass Stack {private:int stackArray;int top;int capacity;public:Stack(int size) {capacity = size;stackArray = new intcapacity;top =-1;}~Stack(){delete stackArray;}void push(int element) {if (isFull()){std::cout <<"Stack Overflow" << std::endl; return;}stackArray++top = element;}int pop(){if (isEmpty()){std::cout <<"Stack Underflow" << std::endl; return -1;}return stackArraytop;}int peek(){if (isEmpty()){std::cout <<"Stack is empty" << std::endl; return -1;}return stackArraytop;}bool isEmpty(){return top ==-1;}bool isFull(){return top == capacity 1;}};```(二)十进制转二进制函数```cppvoid decimalToBinary(int decimalNumber) {Stack stack(32);while (decimalNumber > 0) {int remainder = decimalNumber % 2;stackpush(remainder);decimalNumber /= 2;}std::cout <<"十进制"<< decimalNumber <<"转换为二进制为: ";while (!stackisEmpty()){std::cout << stackpop();}std::cout << std::endl;}```(三)十进制转八进制函数```cppvoid decimalToOctal(int decimalNumber) {Stack stack(16);while (decimalNumber > 0) {int remainder = decimalNumber % 8;stackpush(remainder);decimalNumber /= 8;}std::cout <<"十进制"<< decimalNumber <<"转换为八进制为: ";while (!stackisEmpty()){std::cout << stackpop();}std::cout << std::endl;}```(四)十进制转十六进制函数```cppvoid decimalToHexadecimal(int decimalNumber) {Stack stack(16);while (decimalNumber > 0) {int remainder = decimalNumber % 16;if (remainder < 10) {stackpush(remainder +'0');} else {stackpush(remainder 10 +'A');}decimalNumber /= 16;}std::cout <<"十进制"<< decimalNumber <<"转换为十六进制为: ";while (!stackisEmpty()){std::cout << stackpop();}std::cout << std::endl;}```(五)主函数```cppint main(){int decimalNumber;std::cout <<"请输入一个十进制数: ";std::cin >> decimalNumber; decimalToBinary(decimalNumber);decimalToOctal(decimalNumber);decimalToHexadecimal(decimalNumber);return 0;}```五、实验结果与分析(一)实验结果输入十进制数 25,得到以下结果:二进制:11001八进制:31十六进制:19(二)结果分析通过实验,成功实现了将十进制数转换为二进制、八进制和十六进制。
不同进制间的转换实验报告
不同进制间的转换实验报告1. 通过实验了解不同进制表示法之间的转换规则;2. 掌握将一个进制转换为另一个进制的方法。
实验材料和设备:1. 笔记本电脑;2. 实验工具:计算器或电脑上的进制转换工具。
实验步骤:1. 了解不同进制表示法:1) 十进制:使用10个数字(0-9)进行计数;2) 二进制:使用2个数字(0和1)进行计数;3) 八进制:使用8个数字(0-7)进行计数;4) 十六进制:使用16个数字(0-9和A-F)进行计数。
2. 十进制转换为其他进制:a) 二进制:将十进制数不断除以2,将每次的余数从下往上排列,直到商为0,最终结果即为二进制数;b) 八进制:将十进制数不断除以8,将每次的余数从下往上排列,直到商为0,最终结果即为八进制数;c) 十六进制:将十进制数不断除以16,将每次的余数从下往上排列,对于大于9的余数,用A-F表示,直到商为0,最终结果即为十六进制数。
3. 其他进制转换为十进制:a) 二进制:将二进制数从右往左,每一位乘以对应的2的幂次,再将结果相加;b) 八进制:将八进制数从右往左,每一位乘以对应的8的幂次,再将结果相加;c) 十六进制:将十六进制数从右往左,每一位乘以对应的16的幂次,再将结果相加,对于A-F这些字母,可以将其转换为对应的十进制数再进行计算。
实验结果和讨论:1. 将十进制数11转换为二进制:a) 11除以2得商5余1;b) 5除以2得商2余1;c) 2除以2得商1余0;d) 1除以2得商0余1;e) 从下往上排列余数:1011;f) 结果为二进制数1011。
2. 将十进制数17转换为八进制:a) 17除以8得商2余1;b) 2除以8得商0余2;c) 从下往上排列余数:21;d) 结果为八进制数21。
3. 将十进制数123转换为十六进制:a) 123除以16得商7余11(11用B表示);b) 7除以16得商0余7;c) 从下往上排列余数:7B;d) 结果为十六进制数7B。
进制转换实验报告
一、实验目的:
掌握.Net平台上C#程序的基本编写与调试方法
二、实验内容:
1、编写C#.net基本语法程序,并调试。
2、开发一个向任意进制进行转换的程序:1)用户通过控制台输入一10进制数(正数);2)用户输入转换的进制(进制范围:2~32,如:7进制);3)程序计算处理并输出转换进制的数字(如:输出7进制数)。
publicstaticstringConvert(intnumber,intformat)
{
if(number == 0)
returnnumber.ToString();
Stack<char> sb =newStack<char>();
while(number > 0)
{
sb.Push(character[(number % format)]);
签名:
附加代码
进制转换代码:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
namespace进制转换
{
publicclassFormatConvert
{
protectedstaticstringcharacter ="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
intnum =int.Parse(Console.ReadLine());
Console.Write("请输入要转换到X进制(2<=X<=32):");
intTo =int.Parse(CБайду номын сангаасnsole.ReadLine());
进制转化实验报告模板(3篇)
第1篇实验名称:进制转化实验实验日期:____年__月__日实验地点:____实验室实验人员:____、____、____实验目的:1. 理解不同进制之间的转换原理。
2. 掌握二进制、八进制、十进制和十六进制之间的相互转换方法。
3. 培养实验操作能力和数据处理能力。
实验原理:进制是表示数值的方法,不同的进制使用不同的数字符号和规则。
常见的进制有二进制、八进制、十进制和十六进制。
本实验通过理论学习和实际操作,掌握不同进制之间的转换方法。
实验仪器与材料:1. 计算器2. 纸和笔3. 实验指导书实验步骤:一、二进制与十进制的转换1. 将十进制数转换为二进制数。
- 方法:将十进制数不断除以2,记录下余数,将余数从下到上排列,得到的数即为二进制数。
2. 将二进制数转换为十进制数。
- 方法:将二进制数从右到左,每位乘以对应的2的幂次,将所有结果相加,得到的数即为十进制数。
二、八进制与十进制的转换1. 将十进制数转换为八进制数。
- 方法:将十进制数不断除以8,记录下余数,将余数从下到上排列,得到的数即为八进制数。
2. 将八进制数转换为十进制数。
- 方法:将八进制数从右到左,每位乘以对应的8的幂次,将所有结果相加,得到的数即为十进制数。
三、十六进制与十进制的转换1. 将十进制数转换为十六进制数。
- 方法:将十进制数不断除以16,记录下余数,将余数从下到上排列,当余数大于9时,用字母A、B、C、D、E、F表示,得到的数即为十六进制数。
2. 将十六进制数转换为十进制数。
- 方法:将十六进制数从右到左,每位乘以对应的16的幂次,将所有结果相加,得到的数即为十进制数。
实验数据记录:1. 十进制数转换为二进制数:- 十进制数:10- 转换结果:10102. 十进制数转换为八进制数:- 十进制数:100- 转换结果:1443. 十进制数转换为十六进制数:- 十进制数:255- 转换结果:FF实验结果分析:通过本次实验,我们成功地将十进制数转换为二进制、八进制和十六进制数,同时也将这三种进制数转换回十进制数。
数制转换实验报告
数制转换实验报告数制转换实验报告一、实验目的本次实验的主要目的是通过实际操作,掌握不同数制之间的转换方法,以及加深对数制转换的理解。
二、实验原理1. 二进制与十进制的转换:二进制数是由0和1组成的数,而十进制数是由0~9组成的数。
将一个二进制数转换为十进制数的方法是,将每一位上的数与对应的权值相乘,再将结果相加即可。
2. 二进制与八进制的转换:八进制数是由0~7组成的数。
将一个二进制数转换为八进制数的方法是,将二进制数从右往左每三位分组,然后将每组转换为对应的八进制数。
3. 二进制与十六进制的转换:十六进制数是由0~9和A~F组成的数。
将一个二进制数转换为十六进制数的方法是,将二进制数从右往左每四位分组,然后将每组转换为对应的十六进制数。
三、实验步骤1. 二进制转十进制:将二进制数101011转换为十进制数的步骤如下:1) 将二进制数的每一位与对应的权值相乘,即1*2^5 + 0*2^4 + 1*2^3 +0*2^2 + 1*2^1 + 1*2^0。
2) 计算结果为:32 + 0 + 8 + 0 + 2 + 1 = 43。
2. 十进制转二进制:将十进制数43转换为二进制数的步骤如下:1) 将十进制数43除以2,得到商21和余数1。
2) 将商21再次除以2,得到商10和余数1。
3) 将商10再次除以2,得到商5和余数0。
4) 将商5再次除以2,得到商2和余数1。
5) 将商2再次除以2,得到商1和余数0。
6) 将商1再次除以2,得到商0和余数1。
7) 将余数从下往上排列,得到二进制数101011。
3. 二进制转八进制:将二进制数101011转换为八进制数的步骤如下:1) 将二进制数从右往左每三位分组,得到10和1011两组。
2) 将每组转换为对应的八进制数,即2和13。
3) 将转换后的八进制数从左往右排列,得到八进制数23。
4. 八进制转二进制:将八进制数23转换为二进制数的步骤如下:1) 将八进制数的每一位转换为对应的三位二进制数,即2转换为010,3转换为011。
进制的转换实验报告
进制的转换实验报告引言进制是计算机科学中的重要概念之一,它描述了数字在数码系统中的表示方式。
在计算机中,常用的进制有二进制、八进制和十六进制。
本次实验旨在探索进制之间的转换方法,并通过实验验证这些方法的正确性和有效性。
实验目的1. 理解二进制、八进制和十六进制的概念及其应用场景。
2. 掌握不同进制之间的相互转换方法。
3. 验证进制转换方法的正确性和有效性。
实验方法1. 二进制与八进制的转换对于二进制转八进制,需要先将二进制数按照三位一组进行划分,形成八进制的表示形式。
每个三位二进制数可以直接对应到一个八进制数。
2. 二进制与十六进制的转换对于二进制转十六进制,需要先将二进制数按照四位一组进行划分,形成十六进制的表示形式。
每个四位二进制数可以直接对应到一个十六进制数。
3. 八进制与十六进制的转换对于八进制转十六进制,需要先将八进制数转换为二进制数,然后再将二进制数转换为十六进制数。
实验结果与分析1. 二进制与八进制的转换以二进制数1011101为例,将其划分为三位一组得到八进制数的表示形式为:1011101 →001 011 101 →135经过验证,将八进制数135重新转换为二进制数,得到:001 011 101 →1011101,与原始二进制数一致。
说明二进制与八进制之间的转换方法是正确的。
2. 二进制与十六进制的转换以二进制数11011101为例,将其划分为四位一组得到十六进制数的表示形式为:11011101 →1101 1101 →DD经过验证,将十六进制数DD重新转换为二进制数,得到:1101 1101 →11011101,与原始二进制数一致。
说明二进制与十六进制之间的转换方法是正确的。
3. 八进制与十六进制的转换以八进制数175为例,将其转换为二进制数得到:001 111 101。
再将二进制数001 111 101转换为十六进制数,得到:1F。
经过验证,将十六进制数1F重新转换为八进制数,得到:1F →001 111 →175,与原始八进制数一致。
进制转换问题实验报告
一、实验目的1. 理解不同进制之间的转换原理。
2. 掌握二进制、八进制、十进制和十六进制之间的转换方法。
3. 培养学生运用进制转换解决实际问题的能力。
二、实验原理进制转换是计算机科学中的一项基本技能,不同的进制表示方式具有不同的特点。
二进制是一种基数为2的计数系统,使用0和1两个数字表示。
八进制、十进制和十六进制分别以8、10和16为基数,使用0-9和A-F(大写或小写)的数字表示。
进制转换的基本原理是将一个数的每一位按照基数进行转换,然后根据需要调整小数点位置。
三、实验内容1. 二进制与十进制之间的转换2. 八进制与十进制之间的转换3. 十六进制与十进制之间的转换4. 不同进制之间的转换四、实验步骤1. 二进制与十进制之间的转换(1)将二进制数转换为十进制数将二进制数按位权展开,求和得到十进制数。
例如:二进制数1101转换为十进制数为12^3 + 12^2 + 02^1 + 12^0 = 13。
(2)将十进制数转换为二进制数使用除以2取余法,将十进制数转换为二进制数。
例如:十进制数13转换为二进制数为1101。
2. 八进制与十进制之间的转换将八进制数按位权展开,求和得到十进制数。
例如:八进制数17转换为十进制数为18^1 + 78^0 = 15。
(2)将十进制数转换为八进制数使用除以8取余法,将十进制数转换为八进制数。
例如:十进制数15转换为八进制数为17。
3. 十六进制与十进制之间的转换(1)将十六进制数转换为十进制数将十六进制数按位权展开,求和得到十进制数。
例如:十六进制数1A转换为十进制数为116^1 + 1016^0 = 26。
(2)将十进制数转换为十六进制数使用除以16取余法,将十进制数转换为十六进制数。
例如:十进制数26转换为十六进制数为1A。
4. 不同进制之间的转换(1)将二进制数转换为八进制数将二进制数每三位一组,分别转换为对应的八进制数。
例如:二进制数11011011转换为八进制数为216。
数制转化实验报告
一、实验目的1. 理解数制转化的基本原理和方法。
2. 掌握十进制、二进制、八进制和十六进制之间的相互转换。
3. 熟悉汇编语言编程,提高编程能力。
二、实验环境1. 操作系统:Windows 102. 编译器:Keil uVision 53. 汇编语言:x86汇编语言三、实验内容1. 十进制到二进制的转换2. 二进制到八进制的转换3. 八进制到十六进制的转换4. 十六进制到十进制的转换四、实验步骤1. 十进制到二进制的转换(1)定义变量:src为十进制数,dst为二进制数。
(2)编写程序:```assemblymov ax, src ; 将十进制数src存入寄存器axmov cx, 32 ; 初始化循环计数器cx为32(二进制数32位)mov bx, 0 ; 初始化二进制数dst为0convert_loop:shl ax, 1 ; 将ax左移一位,最高位进入进位标志位jc carry_bit; 如果进位标志位为1,则跳转到carry_bitjmp next_bitcarry_bit:or bx, 1 ; 如果进位标志位为1,则将bx最低位设为1next_bit:loop convert_loop ; 循环32次mov dst, bx ; 将转换后的二进制数存入变量dst```(3)运行程序,查看结果。
2. 二进制到八进制的转换(1)定义变量:src为二进制数,dst为八进制数。
(2)编写程序:```assemblymov ax, src ; 将二进制数src存入寄存器axmov cx, 3 ; 初始化循环计数器cx为3(二进制数每3位转换一位八进制数)mov bx, 0 ; 初始化八进制数dst为0convert_loop:mov dx, ax ; 将ax的值复制到dxand dx, 0x07 ; 将dx与0x07进行按位与操作,保留最低3位add dl, '0' ; 将dl的值转换为对应的字符mov [dst], dl; 将转换后的八进制数存入变量dstshr ax, 3 ; 将ax右移3位,准备下一组3位loop convert_loop ; 循环3次```(3)运行程序,查看结果。
(完整word版)c语言中进制转换数据结构实训报告
《进制之间转换》数据结构程序设计报告专业:计算机网络技术班级:姓名:学号:二○一二年四月三十日目录1.需求分析 (1)2.概要设计 (2)3.采用的算法(流程图) (2)4.详细设计 (2)5. 调试分析 (3)6.用户使用说明 (3)7.测试结果 (3)8.附录 (13)1、需求分析(1)输入的形式和输入值的范围:◆不大于4位的十六进制数◆不大于16位的二进制数◆十进制数(2)输出的形式:同上(3)程序的功能:十六进制转化为十进制十六进制转化为二进制十六进制转化为八进制十进制转化为二进制十进制转化为八进制二进制转化为十进制二进制转化为十六进制(4)测试数据十六进制转化为十进制、十六进制转化为二进制:十六进制转化为八进制、十进制转化为二进制、十进制转化为八进制、二进制转化为十进制:二进制转化为十六进制、输入输入出错:2、概要设计:一,进制之间的转换用到头文件包match.h、stdio.h、stdlib.h。
问题要求根据输入的不同字符,执行不同的功能。
转换过程中需要各个函数之间进行调用二,输入合适的数据得出转换的数据,其重要考虑到输入数据的范围。
3.采用的算法(流程图)4.详细设计:5.调试分析:(1)首先是乱码问题。
由于使用中文所以出现了乱码,把中文改成英文就好了。
(2)如果选择0直接退出根本看不到goodbye所以加getch()可以停留在执行屏幕(3)在这次设计中,首先,我发现了很多问题,由于自己基本的语句掌握的不是十分熟练,所以在一开始不知道怎样把松散的函数调用紧凑地联系起来,经过仔细的看书以及向同学请教,终于将基本框架搭好,在调整细节时就相对轻松一些了,所以经过这次课程设计,我总结出了自己在学习数据结构中的不足,并且为其他类似语言打下了良好的基础,十分感谢老师以及同学的帮助,在此过程中还锻炼了我们与别人沟通的能力,使我们受益匪浅。
6、用户使用说明:(1)运行程序选择自己要转换的形式(2)输入对应数据(3)输入0退出7、测试结果:输入1———>输入1A1——>输出417输入2——>输入1A1——>输出110100001B输入3——>输入1A1——>输出641Q输入4——>输入12——>输出1100B输入5——>输入 12——>输出 14K输入6——>输入11011010——>输出218输入7——>输入101——>输出5H输入0——>退出8、附录(源代码):#include <stdio.h>#include <stdlib.h>#include<math.h>int Hten(){ int i=0,j=0,m=0;char x[10];char f=0;printf("Please enter no more than 4digit hexadecimal number sixteen\n");while(f!='\n'){scanf("%c",&x[i]);f=x[i];m++;i++;}for(i=0;i<m-1;i++){ if(x[i]>='A'&&x[i]<='F')x[i]=x[i]-55;elseif(x[i]>='0'&&x[i]<='9')x[i]=x[i]-48;else{ printf("Please input the correct form\n");return 0;}}for(i=0;i<m-1;i++)j=j+x[i]*pow(16,m-1-i-1);return j;}typedef int datatype;#define maxsize 64typedef struct{datatype data[maxsize];int top;}seqstack;setnull(seqstack *s){s->top=-1;}int Empty(seqstack *s){if(s->top>=0)return 0;/*false*/elsereturn 1;/*ture*/}int Full(seqstack *s){if(s->top==maxsize-1)return 1;elsereturn 0;}seqstack *push(seqstack *s,int x,int N) {int n;if(Full(s)){printf("overfull\n");return NULL;}else{while(x!=0){ n=x%N;x=x/N;s->top++;s->data[s->top]=n;}return s;}}int pop(seqstack *s){int x;if(Empty(s)){printf("empty\n");return 0;} else{x=s->data[s->top];s->top--;return x;}}Htwo(){seqstack *s;int k;s=(seqstack *)malloc(sizeof(seqstack));setnull(s);k=Hten();if(k!=0){push(s,k,2);}else return ;printf("Converted to a binary outcome for\n"); while(!Empty(s)){printf("%d",pop(s));}printf("B\n");}Height(){int k;seqstack *s;s=(seqstack *)malloc(sizeof(seqstack));setnull(s);k=Hten();if(k!=0)push(s,k,8);else return;printf("Converted to octal results\n");while(!Empty(s)){printf("%d",pop(s));}printf("Q\n");}Tentwo(){ seqstack *s;int k;s=(seqstack *)malloc(sizeof(seqstack));setnull(s);printf("Please enter a decimal number\n");scanf("%d",&k);push(s,k,2);printf("Converted to a binary outcome for\n"); while(!Empty(s)){printf("%d",pop(s));}printf("B\n");}Teneight(){ seqstack *s;int k;s=(seqstack *)malloc(sizeof(seqstack));setnull(s);printf("Please enter a decimal number\n");scanf("%d",&k);push(s,k,8);printf("Converted to octal results\n");while(!Empty(s)){printf("%d",pop(s));}printf("Q\n");}int Twoten(){int i=0,j=0,m=0;char x[10];char f=0;printf("Please enter no more than 16 bits of the binary number\n"); while(f!='\n'){scanf("%c",&x[i]);f=x[i];m++;i++;}for(i=0;i<m-1;i++)if(x[i]=='0'||x[i]=='1')x[i]=x[i]-48;else{ printf("Please input the correct form!\n");return 0;}}for(i=0;i<m-1;i++)j=j+x[i]*pow(2,m-1-i-1);return j;}Twoh(){ int k,y;seqstack *s;s=(seqstack *)malloc(sizeof(seqstack));setnull(s);k=Twoten();if(k!=0){push(s,k,16);}else return ;printf("Into sixteen decimal results\n");while(!Empty(s)){ y=pop(s);if(y<10)printf("%d",y);elseprintf("%c",y+55);printf("H\n");}main(){int a,k;INDEX:printf("**************************************\n");printf("0:\t exit \n");printf("1:\tSixteen hexadecimal conversion to decimal\n");printf("2:\tSixteen hexadecimal into binary\n");printf("3:\tSixteen hexadecimal converted to octal\n");printf("4:\tDecimal to binary\n");printf("5:\tDecimal to octal\n");printf("6:\tBinary to decimal conversion\n");printf("7:\tBinary conversion of sixteen hexadecimal\n");printf(" \t\tcopyright 2008-2018 \n");printf("**************************************\n"); SCANI: printf("What are you going to do?Please select a menu\n");scanf("%d",&a);getchar();switch(a){case 0: goto EXT;case 1: goto SET1;case 2: goto SET2;case 3: goto SET3;case 4: goto SET4;case 5: goto SET5;case 6: goto SET6;case 7:goto SET7;default: goto INDEX;}SET1:k=Hten();if(k!=0){printf("The result is converted to decimal\n");printf("%d\n",k);}goto SCANI;SET2: Htwo(); goto SCANI;SET3: Height(); goto SCANI;SET4: Tentwo();goto SCANI;SET5: Teneight();goto SCANI;SET6:k=Twoten();if(k!=0){printf("The result is converted to decimal\n");printf("%d\n",k);}goto SCANI;SET7:Twoh();goto SCANI;EXT: printf(" goodbye!\n");getch();}。
进制转换编程报告
进制转换编程报告一.引言:进制转换是人们利用符号来计数的方法,包含很多种数字转换。
进制转换由一组数码符号和两个基本因素(“基”与“权”)构成。
二.方法原理介绍:十进制整数转换为二进制整数十进制整数转换为二进制整数采用"除2取余,逆序排列"法。
具体做法是:用2整除十进制整数,可以得到一个商和余数;再用2去除商,又会得到一个商和余数,如此进行,直到商为0时为止,然后把先得到的余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位,依次排列起来。
十进制整数转二进制如:255=(11111111)B255/2=127=====余1127/2=63======余163/2=31=======余131/2=15=======余115/2=7========余17/2=3=========余13/2=1=========余11/2=0=========余1789=1100010101789/2=394.5 =1 第10位394/2=197 =0 第9位197/2=98.5 =1 第8位98/2=49 =0 第7位49/2=24.5 =1 第6位24/2=12 =0 第5位12/2=6 =0 第4位6/2=3 =0 第3位3/2=1.5 =1 第2位1/2=0.5 =1 第1位原理:众所周知,二进制的基数为2,我们十进制化二进制时所除的2就是它的基数。
谈到他的原理,就不得不说说关于位权的概念。
某进制计数制中各位数字符号所表示的数值表示该数字符号值乘以一个与数字符号有关的常数,该常数称为“位权” 。
位权的大小是以基数为底,数字符号所处的位置的序号为指数的整数次幂。
十进制数的百位、十位、个位、十分位的权分别是10的2次方、10的1次方、10的0次方,10的-1次方。
二进制数就是2的n次幂。
按权展开求和正是非十进制化十进制的方法。
下面我们开讲原理,举个十进制整数转换为二进制整数的例子,假设十进制整数A化得的二进制数为edcba 的形式,那么用上面的方法按权展开,得A=a(2^0)+b(2^1)+c(2^2)+d(2^3)+e(2^4) (后面的和不正是化十进制的过程吗)现在假设该数未化为二进制,除以基数2得A/2=a(2^0)/2+b(2^1)/2+c(2^2)/2+d(2^3)/2+e(2^4)/2注意:a除不开二,余下了!其他的绝对能除开,因为他们都包含2,而a 乘的是1,他本是绝对不包含因数2,只能余下。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
进制转换编程报告
一.引言:
进制转换是人们利用符号来计数的方法,包含很多种数字转换。
进制转换由一组数码符号和两个基本因素(“基”与“权”)构成。
二.方法原理介绍:
十进制整数转换为二进制整数
十进制整数转换为二进制整数采用"除2取余,逆序排列"法。
具体做法是:用2整除十进制整数,可以得到一个商和余数;再用2去除商,又会得到一个商和余数,如此进行,直到商为0时为止,然后把先得到的余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位,依次排列起来。
十进制整数转二进制
如:255=(11111111)B
255/2=127=====余1
127/2=63======余1
63/2=31=======余1
31/2=15=======余1
15/2=7========余1
7/2=3=========余1
3/2=1=========余1
1/2=0=========余1
789=1100010101
789/2=394.5 =1 第10位
394/2=197 =0 第9位
197/2=98.5 =1 第8位
98/2=49 =0 第7位
49/2=24.5 =1 第6位
24/2=12 =0 第5位
12/2=6 =0 第4位
6/2=3 =0 第3位
3/2=1.5 =1 第2位
1/2=0.5 =1 第1位
原理:
众所周知,二进制的基数为2,我们十进制化二进制时所除的2就是它的基数。
谈到他的原理,就不得不说说关于位权的概念。
某进制计数制中各位数字符号所表示的数值表示该数字符号值乘以一个与数字符号有关的常数,该常数称为“位权” 。
位权的大小是以基数为底,数字符号所处的位置的序号为指数的整数
次幂。
十进制数的百位、十位、个位、十分位的权分别是10的2次方、10的1次方、10的0次方,10的-1次方。
二进制数就是2的n次幂。
按权展开求和正是非十进制化十进制的方法。
下面我们开讲原理,举个十进制整数转换为二进制整数的例子,假设十进制整数A化得的二进制数为edcba 的形式,那么用上面的方法按权展开,得A=a(2^0)+b(2^1)+c(2^2)+d(2^3)+e(2^4) (后面的和不正是化十进制的过程吗)
现在假设该数未化为二进制,除以基数2得
A/2=a(2^0)/2+b(2^1)/2+c(2^2)/2+d(2^3)/2+e(2^4)/2
注意:a除不开二,余下了!其他的绝对能除开,因为他们都包含2,而a 乘的是1,他本是绝对不包含因数2,只能余下。
商得:
b(2^0)+c(2^1)+d(2^2)+e(2^3),再除以除以基数2余下了b,以此类推。
当这个数不能再被2除时,先余掉的a位数在原数低,而后来的余数数位高,所以要把所有的余数反过来写。
正好是edcba
2.十进制小数转换为二进制小数
十进制小数转换成二进制小数采用"乘2取整,顺序排列"法。
具体做法是:用2乘十进制小数,可以得到积,将积的整数部分取出,再用2乘余下的小数部分,又得到一个积,再将积的整数部分取出,如此进行,直到积中的小数部分为零,此时0或1为二进制的最后一位。
或者达到所要求的精度为止。
然后把取出的整数部分按顺序排列起来,先取的整数作为二进制小数的高位有效位,后取的整数作为低位有效位。
十进制小数转二进制
如:0.625=(0.101)B
0.625*2=1.25======取出整数部分1
0.25*2=0.5========取出整数部分0
0.5*2=1==========取出整数部分1
再如:0.7=(0.1 0110 0110...)B
0.7*2=1.4========取出整数部分1
0.4*2=0.8========取出整数部分0
0.8*2=1.6========取出整数部分1
0.6*2=1.2========取出整数部分1
0.2*2=0.4========取出整数部分0
0.4*2=0.8========取出整数部分0
0.8*2=1.6========取出整数部分1
0.6*2=1.2========取出整数部分1
0.2*2=0.4========取出整数部分0
原理:
关于十进制小数转换为二进制小数
假设一十进制小数B化为了二进制小数0.ab的形式,同样按权展开,得B=a(2^-1)+b(2^-2)
因为小数部分的位权是负次幂,所以我们只能乘2,得
2B=a+b(2^-1)
注意a变成了整数部分,我们取整数正好是取到了a,剩下的小数部分也如此。
值得一提的是,小数部分的按权展开的数位顺数正好和整数部分相反,所以不必反向取余数了。
三.程序代码及测试结果:
#include <stdio.h>
#define NUM 2
#define ZERO 0.000001
void integer(int n)
{
if(n>0)
{
integer(n/NUM);
printf("%d",n%NUM);
}
}
void decimal(double m)
{
if(m>ZERO)
{
m=m*NUM;
printf("%d",(long)m);
decimal(m-(long)m);
}
}
void main()
{
double f;
long n;
while(1)
{
printf("请输入一个10进制的数:");
scanf("%lf",&f);
printf("转换成%d进制的数为:",NUM);
if(f<0)
{
f=-f;
printf("-");
}
n=(long)f;
integer(n);
printf(".");
decimal(f-n);
printf("\n");
}
}
四.总结:
通过这次程序设计,使我加深了对进制转换原理的理解及应用。