首页 > 试题广场 >

int fun(int a){ a^=(15)-1; r

[单选题]
int fun(int a){
 a^=(1<<5)-1;
 return a;
}
fun(21)运行结果是()
  • 10
  • 5
  • 3
  • 8
发表于 2016-03-11 19:24:26 回复(0)
这一题我看叉了,
具体思路:
a = a^((1<<5) - 1);  //这里添加一个括号,为了说明减号比异或的优先级高
1<<5 = 00 0001 = 10 0000 
1<<5 - 1 = 10 0000 - 1 = 1 1111
21 = 1 0101 
1 0101 ^ 1 1111 = 0 1010 


发表于 2015-09-19 10:50:34 回复(4)
在数字没有溢出的前提下,对于正数和负数,左移一位都相当于乘以2的1次方,左移n位就相当于乘以2的n次方。
(1<<5): 左移5位相当于乘以2的5次方,即32,则,1左移5位得32

a = a^((1<<5) - 1);  //这里添加一个括号,为了说明减号比异或的优先级高
原式相当于a = a^(31);此函数就是求取一数与31异或后的值

当a=21时,化为二进制:10101
32的二进制:11111
异或后得:01010,即十进制的10
发表于 2017-03-18 15:38:09 回复(4)
1 : 0000 0001 1<<5: 0010 0000 (1<<5)-1: 0001 1111 a : 0001 0101 result : 0000 1010
发表于 2016-11-23 00:48:04 回复(0)
当a=21时,化为二进制:10101
31的二进制:11111
异或后得:01010,即十进制的10
发表于 2019-01-31 21:05:19 回复(0)
异或运算符^,左移运算符《
发表于 2017-05-14 00:44:41 回复(0)
记住抑或^的执行结果是相同则为0,不同则为1,即可做出本题
发表于 2017-05-09 00:02:15 回复(0)
注意运算符优先级,加减优先于位运算符。
编辑于 2018-07-27 16:49:01 回复(0)
我觉得是^=运算符优先级最低,所以先算右边的(1<<5)-1
发表于 2018-04-10 09:46:50 回复(0)
,考查运算符优先级问题,减号(-)比^的优先级要高
发表于 2018-04-07 19:24:46 回复(0)
愚蠢如我 最后一步异或操作我居然是按照按位或操作的 
发表于 2018-03-30 16:16:45 回复(0)
看成^是幂
发表于 2018-02-21 13:36:16 回复(0)
<<为移位符,表示前面的数的二进制向左移动五位,得到100000,减1,得到1111,^符号为异或,化为二进制比较,不同的为1。得到结果
发表于 2017-08-25 20:27:57 回复(0)
1<<5-1 0000 0001左移5位 0010 0000 - 0000 0001 = 0001 1110 ^相同为0否则为1 21 0001 0101 ^ 0001 1110 = 0000 1010 10
编辑于 2016-09-27 10:56:11 回复(0)
a^=(1<<5)-1;相当于a=a^((1<<5)-1);(1<<5)-1=31;31转换为二进制是11111,21二进制是10101,异或结果为01010,转化为十进制就是10
发表于 2016-08-27 16:19:12 回复(0)
   10101  (21的二进制)
   11111  (1<<5)-1 就是31的二进制
^ -----------
   01010 (所以答案就是10)
发表于 2015-09-19 13:33:44 回复(0)
00010101 (21) ^ 00011111 (31) -------- 00001010 (10)
发表于 2025-06-18 17:27:55 回复(0)
异或,不同为1
发表于 2019-09-10 13:46:43 回复(0)
移动五位,1在第六位上
发表于 2019-05-31 20:05:46 回复(0)
移位运算符>算数运算符>^
发表于 2019-03-17 17:26:54 回复(0)