一路阿里巴巴笔试题,用1、2、3 三个数字组成一个最大的数
一道阿里巴巴笔试题,用1、2、3 三个数字组成一个最大的数
题目如下:
给你1、2、3 这三个数字 可以使用C的各种运算符 你能表示的最大的整数是()
A、2*3*sizeof(1)
B、3<<(2<<sizeof(1))
C、sizeof(3)<<(sizeof(2)<<(sizeof(1)))
D、(unsigned long)(2-3)*1
答案是D,可是我算了一下C比D还大啊?
假设是32位机,那么
C:sizeof(3)<<(sizeof(2)<<(sizeof(1))) = 4<<(4<<4) = 4<<(4*2^4)=4<<64=4*2^64=2^66
D:(unsigned long)(-1) = 11111111 11111111 11111111 11111111 =2^32-1
为什么答案是D?求大神解答~
------解决思路----------------------
C答案应该发生数据溢出了吧?在我这里,32位,显示为464.
------解决思路----------------------
你觉得32位的机子,能够进行66位的移位运算?移到31时早就溢出了。
------解决思路----------------------
4<<30的时候就已经为0了。然后你再怎么左移都为0
------解决思路----------------------
然而 你的理解并没有什么卵用
题目如下:
给你1、2、3 这三个数字 可以使用C的各种运算符 你能表示的最大的整数是()
A、2*3*sizeof(1)
B、3<<(2<<sizeof(1))
C、sizeof(3)<<(sizeof(2)<<(sizeof(1)))
D、(unsigned long)(2-3)*1
答案是D,可是我算了一下C比D还大啊?
假设是32位机,那么
C:sizeof(3)<<(sizeof(2)<<(sizeof(1))) = 4<<(4<<4) = 4<<(4*2^4)=4<<64=4*2^64=2^66
D:(unsigned long)(-1) = 11111111 11111111 11111111 11111111 =2^32-1
为什么答案是D?求大神解答~
------解决思路----------------------
C答案应该发生数据溢出了吧?在我这里,32位,显示为464.
------解决思路----------------------
你觉得32位的机子,能够进行66位的移位运算?移到31时早就溢出了。
------解决思路----------------------
4<<30的时候就已经为0了。然后你再怎么左移都为0
------解决思路----------------------
然而 你的理解并没有什么卵用