首页 > 试题广场 >

以下程序的输出结果是()#includein...

[单选题]
以下程序的输出结果是( )
#include <stdio.h>
int main() {
    unsigned char a = 235;
    unsigned char b = ~a;
    unsigned char c = b >> 1;
    printf(“%d”, c);
};

  • 6
  • 2
  • 4
  • 10
私以为这个题目不是简单地考察十进制转二进制再做取反移位的操作,这样的操作,势必要用到草稿纸(不用草稿纸也行,但脑算还是容易错的),这个题直接从二进制的角度出发进行解析,如下。
(255)10 = (1111 1111)2,意思是,unsigned char 型的变量对应最大的十进制数是255,用255-235=20,记住这个20,用进制转换的步骤对比着解析,(235)10 = (1110 1011)2 ,然后对235进行取反,即(0001 0100)= 20,也就是说,取反的这一步,b = ~a 就可以直接通过熟悉的十进制运算直接得出20,第三步,对 b 右移一位,c = b >> 1 ,在二进制的运算中,左移右移,对应十进制的关系就是乘2或除以2,左移一位是乘2,右移一位是除以2,所以这一步,20 / 2 = 10。 拓展一个例子,假如 255 - a 得到的是一个奇数,假设是21,那很简单,右移一位,就是除以2,而且是整除,余数1直接不要就可以了。
总结下这个题目,我认为看似是考察十进制与二进制之间的转换以及基本运算,但实际是在考察是否掌握二进制运算与十进制之间相互对应的实质,也就是说,理解与掌握了这个本质,这个题目是完全可以通过简单的口算解决的,不需要动草稿纸,毕竟是个选择题嘛~
发表于 2021-10-28 20:16:39 回复(3)
将10进制转换为2进制,a=1110 1011; b=~a=0001 0100; c=b>>1=0000 1010。最后转成10进制就是c=10
发表于 2020-09-28 13:56:46 回复(0)
235=255-20,也就是说235相当于二进制全1,把20的二进制对应的位清0,那么对255取反就是把20对应的二进制位置1,其他位清0!这样取反结果就是20,再右移1位,也就是10。
发表于 2022-01-13 10:45:04 回复(0)
~按位取反;>>右移,相当于➗2
发表于 2017-09-17 11:38:02 回复(0)

a = 235,二进制为1110 1011

~表示按位取反,所以 b 二进制表示为 0001 0100

>>表示右移1位,所以 c 二进制表示为 1010,即 c 等于10

发表于 2023-09-06 09:22:12 回复(0)
评论好麻烦,取反不就是255-235吗,然后右移一位就是除以2,等于10
发表于 2023-10-03 21:09:21 回复(2)
~a=-236    (先转成int再按位取反)
b=20         (0001,0100)
c=10         (0000,1010)

发表于 2020-08-24 11:11:30 回复(0)
先将235转为二进制,再按位取反,再右移一位 即可
发表于 2021-04-29 11:19:26 回复(0)