本节书摘来自华章计算机《计算机系统:核心概念及软硬件实现(原书第4版)》一书中的第3章,第3.9节,作者:[美] J. 斯坦利·沃法德(J. Stanley Warford)著, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。
3.9 问题
3.1节
56.用C++写一个程序,输入一个4位八进制数,打印它后面的10个八进制数。用int octNum[4];来定义一个八进制数,用octNum[0]存储最高的(即最左的)八进制位,octNum[3]为最低的八进制位。采用交互式输入来测试你的程序。
57.用C++写一个程序,输入一个8位二进制数,打印它后面的10个二进制数。用int binNum[4];来定义一个八进制数,用binNum[0]存储最高的(即最左的)位,binNum[7]为最低位。请用户输入第一个二进制数字,每位用至少一个空格分开。
58.用C++写一个函数,把8位无符号二进制数转换为十进制正整数,使用问题57中的二进制数定义。采用交互式输入来测试你的函数。
59.用C++写一个空函数,把十进制正整数转换为8位无符号二进制数。使用问题57中的二进制数定义。采用交互式输入来测试你的空函数。
60.像问题57那样定义一个二进制数,写一个空函数
来计算两个二进制数bin1和bin2的和sum。cBit是加法运算后进位位的值。采用交互式输入来测试你的空函数。
3.3节
61.用C++写一个函数,把8位补码二进制数转换为十进制整数,使用问题57的二进制数定义。采用交互式输入来测试你的函数。
62.用C++写一个空函数,把十进制整数转换为8位补码二进制数,使用问题57的二进制数定义。采用交互式输入来测试你的空函数。
3.2节
63.像问题57那样定义一个二进制数,写一个空函数
来计算两个二进制数bin1和bin2的AND运算值bAnd。采用交互式输入来测试你的空函数。
64.写一个问题63那样的函数,使用OR运算。
65.像问题57那样定义一个二进制数,写一个函数
来对binNum执行算术左移运算,cBit是位移后的进位位的值。采用交互式输入来测试你的函数。
66.写一个问题65那样的函数,执行算术右移运算。
3.4节
67.用C++写一个程序,输入一个4位十六进制数,打印它后面的10个十六进制数。用int hexNum[4]定义一个十六进制数,十六进制的输入/输出采用大写字母,例如,3C6F是合法的输入。
68.用C++写一个函数,把4位十六进制数转换为十进制正整数,使用问题67中十六进制数的定义。采用交互式输入测试你的函数,十六进制输入采用大写字母。
69.用C++写一个空函数,把十进制正整数转换为4位十六进制数,使用67题中十六进制数的定义。采用交互式输入测试你的空函数,十六进制输出采用大写字母。
70.用C++写一个函数,把4位十六进制数转换为可能为负的十进制整数,使用问题67中十六进制数的定义,假定十六进制值代表一个补码表示的16位单元。采用交互式输入测试你的空函数,十六进制输入采用大写字母。
71.用C++写一个空函数,把可能为负的十进制整数转换为4位十六进制数,使用问题67中十六进制数的定义,假定十六进制值代表一个补码表示的16位单元。采用交互式输入测试你的空函数,十六进制输出采用大写字母。
72.用C++写一个函数,把一个任意基数的正数转换到十进制。例如,对于4位、基数为6的数字,声明:
采用交互式输入测试你的函数。把要转换的数读入一个字符数组,如果基数值需要,使用大写字母输入。写一个空函数,在转换为十进制前,把它转换为适当的int数组类型的值。
必须能够通过仅改变常量base就可以修改你的程序,使其用于其他不同基数的运算;必须能够通过仅改变常量numDigits就可以修改程序,使其用于不同的位数。
73.用C++写一个空函数,把一个十进制正整数转换为任意基数的数。number的声明与问题72中一样。采用交互式输入测试你的程序,如果基数值需要,使用大写字母输出。
必须能够通过只改变常量base就可以修改你的程序,使其用于其他不同基数的运算;必须能够通过仅改变常量numDigits就可以修改程序,使其用于不同的位数。