阿里地区一道面试题,求解释

阿里一道面试题,求解释
一道面试题,求大家解释一下

如下函数,在32bit系统foo(2^31-3)的值是:
Int foo(int x)
{
Return x&-x;
}
A: 0   B: 1  C:2  D:4
答案:C  2^31-3=2^(31-3)=2^28=30, 30&(-30)=2,30的二进制表示中1的最低位权值;

不知上面这个解法是什么原理。  另外自己理解 32bit中  2^31 应该是 -2^31 (32bit中 最大的负数),   那么-2^31-3 这个数在 计算机中将怎么表示呢?
求具体过程,谢谢

------解决方案--------------------
你不懂x&-x是干什么的话,那也直接把x=30带进去算就是了啊。
顺便^是xor。
------解决方案--------------------
引用:
一直以为是幂指数。
 另外 2^31-3=2^(31-3) 是怎么算的?

运算符优先级
------解决方案--------------------
赞同楼上回答
------解决方案--------------------
x & (-x)的值为x最低位的值,比如x=6,那么它的值就为1100 => 100

其实-x = 2的32次方-x,做个减法就明了,比如8位计算机系统中,x=6

-6 = 100000000 - 00001100(6)
                          = 11110100(-6)