问答题 假定在一个8位字长的计算机中运行如下类C程序段:unsigned int x=134:unsigned int y=246;int m=x;int n=y;unsifined int z1=x-y;unsigned int z2=x+y;int k1=m-n;int k2=m+n;若编译器编译时将8个8位寄存器R1~R8分别分配给变量x、y、m、n、z1、z2、k1和k2。请回答下列问题:(提示:带符号整数用补码表示)(1)执行上述程序段后,寄存器R1、R5和R6的内容分别是什么(用十六进制表示)?(2)执行上述程序段后,变量m和k1的值分别是多少(用十进制表示)?(3)上述程序段涉及带符号整数加/减、无符号整数加/减运算,这四种能否利用同一个加法器及辅助电路实现?简述理由。(4)计算机内部如何判断带符号整数加/减运算的结果是否发生溢出?上述程序段中,哪些带符号整数运算语句的执行结果会发生溢出?
【正确答案】正确答案:本题考查无符号数、带符号数和溢出的概念,以及C语言中强制类型转换操作对数据的处理方式。注意: 1.无符号数没有溢出的概念,超出最大值的进位将被丢弃。 2.C语言规定在无符号整数和带符号整数之间进行强制类型转换时,机器码并不改变,改变的是对机器码的解释方式。 (1)执行上述程序段后,寄存器R1、R5和R6的内容分别是什么?(用十六进制表示) 各寄存器和变量的对应关系如下表所示。
【答案解析】