|
|
|
|
移动端

1.10.3 位运算(2)

《程序员面试笔试真题与解析》本书针对当前各大 IT企业面试笔试中特性与侧重点,精心挑选了 3年以来近百家典型 IT企业的面试笔试真题,这些企业涉及业务包括系统软件、搜索引擎、电子商务、手机 APP、安全关键软件等,面试笔试真题非常具有代表性与参考性。本节为大家介绍位运算。

作者:猿媛之家来源:机械工业出版社|2017-12-06 17:17

开发者盛宴来袭!7月28日51CTO首届开发者大赛决赛带来技术创新分享

1.10.3 位运算(2)

【真题 151】 &和&&的区别是什么?

答案:以下将分别对 &与&&进行说明。

&是按位与操作符, a&b是把 a和 b都转换成二进制数后,然后再进行按位与的运算。而 &&为逻辑

与操作符,a&&b就是当且仅当两个操作数均为 true时,其结果才为 true,只要有一个为 false,a&&b的结果就为 false。此外,&&还具有短路的功能,在参与运算的两个表达式中,只有当第一个表达式的返回值为 true

的时候,才会去计算第二个表达式的值,如果第一个表达式的返回值为 false,则此时&&运算的结果就为 false,同时,不会去计算第二个表达式的值,例如: if(i!=0 && i++>10),当 i的值为 0的时候,表达式 i!=0的返回值为 false,因此,此时将不会执行第二个表达式 i++>10的判断。

【真题 152】有如下代码:

  1. unsigned short A = 10;  
  2. printf("~A = %u\n", ~A);  
  3. char c = 128;  
  4. printf("c=%d\n", c); 

程序的输出是()。

A.10,128 B.-11,-128  C.4294967285,-128 D.-11,128

答案:C。

【真题 153】表达式 4&7的运算结果是()。

A.4 B.1 C.6D.7 答案:A。 &(与)是二进制与操作运算符,其功能是参与运算的两数对应的二进位进行与操作。只有对应的

两个二进位均为 1时,结果位才为 1,否则为 0。

本题中,十进制数字 7的二进制表示为 0111,十进制数字 4的二进制表示为 0100,这两个制数相与的结果为 0100,对应的十进制数为 4。所以,选项 A正确。

【真题 154】 x为整型,请用位运算实现 x%8。

答案:(x<<28)>>28。

有人觉得 x&7可以,但是当 x为负数的时候,这种方法就得不到正确的结果了。

【真题 155】执行“ int x=1;int y=~x;”语句后,y的值为()。

答案:-2。

假设在机器中, int型变量占用 2个字节,那么,整数 1的二进制表示是 0000 0001 ,~为按位取反运算符,所以,对 x取反后, 0000 0001变为 1111 1110,在计算机中整数用补码形式表示,正数的补码是它本身,而负数的补码则是原数值除符号位按位取反再加一,由补码求原数值也是按位取反再加一,那么 1111 1110除符号位按位取反再加一变成 1000 0010,即-2。

【真题 156】有如下代码:

  1. int func(int x){  
  2. int count=0;  
  3. while (x)  
  4. {  
  5. count++;  
  6. xx=x&(x-1);//与运算  
  7. }  
  8. return count;  

当 x=9999时,函数的返回值是()。

A.8 B.9 C.10 D.12答案:A。一个数与这个数减 1的结果进行按位 &运算,结果为:这个数二进制数昀右边的 1变为 0。所以,

该函数的本质为计算一个数的二进制中 1的个数,由于十进制数 9999的二进制表示为 10011100001111,共有 8个 1。所以,选项 A正确。

喜欢的朋友可以添加我们的微信账号:

51CTO读书频道二维码


51CTO读书频道活动讨论群:365934973

【责任编辑:book TEL:(010)68476606】

回书目   上一节   下一节
点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

跨越网络工程师必备训练

本书是根据全国计算机技术与软件专业资格(水平)考试“网络工程师级考试大纲”编写的考试辅导用书。全书主体按考试大纲的章节编排,分上、...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊