运用一种编程语言如下功能:1、从键盘输入一个带符号的十进制定点整数(-127 ~+127之间)2、从屏幕上分别显示其原码、补码、移码形式(8位带符号二进制形式)3、从键盘输入两个带符号十进制定点整数X和Y(-127 ~+127之间),屏幕上输出[X]原和[Y]和[X*Y]原。要求画出程序的流程图。
三、思考
1、计算机中数据是如何表示的?为什么数据要-127~+127 区间?
在计算机系统中,数据以二进制信息单元0,1的形式表示;数据是8位带符号二进制形式,在计算机中二进制是
是11111111~01111111,就是-127~+127。,第一位是符号为,0表示正数,1表示负数。
其中0有两种表示方法,00000000和10000000,即+0和-0。
2、原码一位乘的原理?
在定点计算机中,两个原码表示的数相乘的运算规则是:乘积的符号位由两数的符号按异或运算得到,而乘积的数值部分则是两个正数相乘之积。设n位被乘数和乘数用定点小数表示(定点整数也同样适用)
被乘数 [x]原 = xf .x0 x1 x2 … xn
乘数 [y]原 = yf .y0 y1 y2 … yn
则
乘积 [ z ]原 = ( xf⊕yf ) . (0. x0 x1 x2 …xn)(0 . y1 y2 …yn)
式中,xf为被乘数符号,yf为乘数符号。
乘积符号的运算法则是:同号相乘为正,异号相乘为负。由于被乘数和乘数和符号组合只有四种情况(xf yf = 00,01,10,11),因此积的符号可按“异或”(按位加)运算得到。
3、先行进位的原理?
进位链是传递进位的逻辑电路,先行进位 即高位进位和低位进位同时产生的进位。先行进位有两种,一种是组内并行,组间串行进位链,另一种是组内并行,组间并行进位链,又称并行进位。
并行进位 : 并行地形成各级进位,各进位之间不存在依赖关系,因而这种方式也称为先行进位、同时进位或跳跃进位
#include<iostream>
#include<string.h>
using namespace std;
void fun(int n,int ch) {
int num[7],i=6,fnum[7],a;
if(n<2) num[i--]=n;
while(n>=2) {
num[i--]=n%2;
n=n/2;
if(n<2) num[i--]=n;
}
for(i; i>=0; i--) num[i]=0;
cout<<"原码是:"<<ch;
for(a=0; a<=6; a++) {
cout<<num[a];
fnum[a]=num[a];
}
a=0;//取反
while(a!=7) {
if(fnum[a]==0) fnum[a++]=1;
else fnum[a++]=0;
}
cout<<"\n反码是:"<<ch;
for(a=0; a<=6; a++) cout<<fnum[a];
fnum[6]+=1;
for(a=6; a!=0; a--) {
if(fnum[a]==2) {
fnum[a]=fnum[a]-1;
fnum[a-1]=fnum[a-1]+1;
} else continue;
}
cout<<"\n补码是:"<<ch;
for(a=0; a<=6; a++) cout<<fnum[a];
cout<<"\n移码是:";
if(ch==0)cout<<++ch;
else cout<<--ch;
for(a=0; a<=6; a++) cout<<fnum[a];
}
void fun2(int n,int ch) {
int num[7],i=6,fnum[7],a;
if(n<2) num[i--]=n;
while(n>=2) {
num[i--]=n%2;
n=n/2;
if(n<2) num[i--]=n;
}
for(i; i>=0; i--) num[i]=0;
cout<<ch;
for(a=0; a<=6; a++) {
cout<<num[a];
fnum[a]=num[a];
}
}
int main() {
char str;
int num,ch;
loop1:
cout<<"输入带符号的数字在-127~+127 "<<endl;
cin>>str>>num;
if (num > 127 || num < -127)
{
printf("输入无效\n\n");
goto loop1;
}
if(str=='+') ch=0;
else ch=1;
fun(num,ch);
loop2:
cout<<"\n输入两个带符号的数字在-127~+127 "<<endl;
char str2;
int num2,ch2;
cin>>str>>num>>str2>>num2;
if (num*num2<-127 || num*num2 > 127)
{
printf("输入无效\n\n");
goto loop2;
}
if(str=='+') ch=0;
else ch=1;
cout<<"\n [x]原:";
fun2(num,ch);
if(str2=='+') ch=0;
else ch=1;
cout<<"\n [y]原:";
fun2(num2,ch);
if((str==str2&&str=='+')||(str==str2&&str=='-')) ch=0;
else ch=1;
cout<<"\n[x*y]原:";
fun2(num*num2,ch);
}