深入理解计算机系统的家庭作业
下面两题是深入理解计算机系统的家庭作业,由于没有答案,所以上CSDN上找各位大神求助,两题都有限制的,限值如下:1、禁止使用:条件语句、分支,循环、函数调用、宏调用2、除法、模运算、乘法3、比较运算符,题目如下
1、
- C/C++ code
不用sizeof运算符,编写一个函数,当在32位机上运行时返回1,否则返回0
2、
- C/C++ code
保留最高二进制位,其他位置为0,如传入1010,则返回1000,请写一个函数,函数原型是int leftmost_one(unsigned);
求各位大神帮忙一下,谢谢
[解决办法]
第二题,网上的答案:
- C/C++ code
int leftmost_one(unsigned x) { x |= (x >> 1); x |= (x >> 2); x |= (x >> 4); x |= (x >> 8); x |= (x >> 16); //上面的过程,使得x的最后几位全是1。比如x是0...00001010,经过上面的过程后,x就是0...00001111 return (x & ((~x >> 1) | 0x80000000)); }