int a1=x+y-z; int a2=x-z+y; a1和a2的值一定相等吗? (某公司实习生招聘笔试试题)

来源:互联网 发布:python jsonrpc 编辑:程序博客网 时间:2024/04/29 00:17

       我们先来看看原题:

给定3个int类型的正整数x,y,z,对如下4组表达式判断正确的选项()

int a1=x+y-z; int b1=x*y/z;


int a2=x-z+y; int b2=x/z*y;


int c1=x<<y>>z; int d1=x&y|z;


int c2=x>>z<<y; int d2=x|z&y;

A、a1一定等于a2

B、b1一定定于b2

C、c1一定等于c2

D、d1一定等于d2

      

      首先说明,正确答案是A.   但是, 相信多数同学第一眼就把正确答案A排除了, 估计是被“溢出”吓坏了, 下面, 我们来分析一下:

A.

    为了简便起见, 我们用char来模拟int.

#include <iostream>using namespace std;int main(){char x = 126;char y = 24;char z = 65;char a1 = x + y - z;  // x + y有溢出, 但是 - z后可以减回来char a2 = x - z + y;cout << a1 << endl;cout << a2 << endl;return 0;}
       结果a1和a2是相等的, 为什么呢? 因为char的范围在[-128 127]内循环转127 + 1 = -128,   而-128 + 1 = -127,-128 - 1 = 127


#include <iostream>using namespace std;int main(){int x = 2;int y = 3;int z = 6;    int b1= x * y / z;    int b2 = x / z * y;cout << b1 << endl; // 1cout << b2 << endl; // 0return 0;}


C

#include <iostream>using namespace std;int main(){int x = 2;int y = 2;int z = 2;    int c1 = x << y >> z; // 2先乘以4, 再除以4    int c2 = x >> z << y; // 2先除以4, 再乘以4cout << c1 << endl; // 2cout << c2 << endl; // 0return 0;}

D.

#include <iostream>using namespace std;int main(){int x = 1;int y = 2;int z = 4;    int d1 = x & y | z;int d2 = x | z & y;cout << d1 << endl; // 4cout << d2 << endl; // 1return 0;}
      

           最后需要补充说明的是: 考试的时候, 肯定没有电脑写程序啊, 但用笔分析一下, 也非常简单, 而且更快。



0 0
原创粉丝点击