简答题

以下是两段C语言代码, 函数arith()是直接用C语言写的,而optarith()是对arith()函数以某个确 定的M和N编译生成的机器代码反编译生成的。根据optarith(),可以推断函数arith()中M和N的值各是多少?

正确答案

可以看出x*M和“int t=x;x<<=4;x-=t;”三句对应,这些语句实现了x乘15的功能(左移4位相当于乘以16,然后再减1),因此,M等于15; 
y/N与“if(y<0)y+=3;y>>2;”两句对应,功能主要由第二句“y右移2位”实现,它实现了y除以4的功能,因此N是4。而第一句“if(y<0)y+=3;”主要用于对y=–1时进行调整,若不调整,则-1>>2=–1而–1/4=0,两者不等;调整后–1+3=2,2>>2=0,两者相等。

答案解析

相似试题
  • 考虑以下C语言程序代码: 假设在一个32位机器上执行这些函数,该机器使用二进制补码表示带符号整数。无符号数采用逻辑移位,带符号整数采用算术移位。请填写表格,并说明函数func1和func2的功能。

    简答题查看答案

  • 以下对C语言函数的有关描述中,正确的是()

    单选题查看答案

  • scanf函数是c语言的标准输入函数。

    判断题查看答案

  • printf函数是c语言的标准输出函数。

    判断题查看答案

  • 在C语言的函数中,()

    单选题查看答案

  • C语言的格式输出函数是()。

    填空题查看答案

  • C语言函数返回类型的默认定义类型是()。

    填空题查看答案

  • 在C语言中,函数的隐含存储类别是()

    单选题查看答案

  • 在C语言中,函数的数据类型是指()

    单选题查看答案