首页 > 试题广场 >

Fun(21)结果是?

[单选题]
int fun(int a)
{
    a = (1 << 5) - 1; 
    return a; 
} 
fun(21)结果是()
  • 10
  • 8
  • 5
  • 31
推荐
答案:D
1<<5,这里1左移5位相当于1乘以2的5次方,也就是32
再减去1就是31
编辑于 2015-01-31 12:07:16 回复(2)
原题代码为:
int fun(int a) {
     a^=(1<<5)-1;
     return a;
}
fun(21)求解方法:
首先(1<<5)表示左移5位,相当于1乘以2的5次方,即100000=32。此题答案为31。而原题需要异或运算,即异或运算: 21=010101   ^     31=011111     =》    001010=10,结果应该为10。
编辑于 2015-10-16 00:12:41 回复(8)
注意<<左移运算符的运用。左移的位数写在右边。注意理解。
另外,左移一位相当于数字乘以2,右移一位相当于数字除以2.
发表于 2016-05-20 12:38:03 回复(1)
D
0000 0001 << 5
0010 0000 - 1
0001 1111 --> 31
发表于 2015-03-10 14:24:00 回复(0)
是1左移5位而不是5左移1位!!!
发表于 2020-08-06 09:52:40 回复(0)
21有什么意义
发表于 2015-10-04 13:50:14 回复(2)
0000 0001 <<5=0010 0000=2^5=32
32-1=31
发表于 2021-10-11 09:23:17 回复(0)
1<<5把1左移5位,左移后32
发表于 2020-02-29 18:43:33 回复(0)
答案就是执行(1<<5)-1,然后输出。
但注意一下两个答案的区别:
int count = 32;
int b = (1<<32)-1;
int c = (1<<count) - 1;
此时b = -1,c = 0
因为如果是以变量作为左移右移参数时,会将它先与31相与(int占32bit,其他类型类推),然后才进行移位。
发表于 2017-01-10 12:00:55 回复(0)
整数通过在二进制中右移值发生变化,变为32故函数中a被赋值为31.传入参数21没有任何改变,有没有返回
发表于 2016-04-07 20:56:00 回复(0)