作者lavanil ( )
看板C_and_CPP
标题[问题] 请问一个&的用法
时间Fri Apr 3 12:23:22 2009
int convert_num(int num)
{
/* convert a 16-bit number into a 32-bit Linux integer */
if (num & (1<<15) ) {
num -= (1<<16);
}
return num;
}
这是一个可以把int 的32bits只撷取後面16bits的function
我想问的是if後面的判断式 那个写法的意思
我想他的意思应该是num的第15个bit的值吧
我测试的结果 这种写法 传出来的值就是第n个bit的值(0or1)*2^n
可是为甚麽能这样写?
可以请高手指导一下吗?
这个&在这边的意义跟reference的address有什麽不同吗?
谢谢
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.112.252.170
1F:→ akasan:这边的&的是bit-wise的and 04/03 12:29
可是我用下面这个测试
int c=5;
printf("%d",(c&(1<<2)));
印出来结果是4耶 如果只是bit-wise的结果
不是应该是0或1吗 怎麽还会乘上2的n次方?
※ 编辑: lavanil 来自: 140.112.252.170 (04/03 12:39)
2F:推 LPH66:不是负的 是非0 04/03 12:38
3F:推 chrisdar:1<<2 = 0100b , 5&0100b = 4 没错阿 04/03 13:00
4F:→ VictorTom:您应该查一下bitwise operator << 和 >> 的用法/运作:) 04/03 13:06
5F:→ VictorTom:左右shift是 (00110110)b 所有bit做shift, 想像拉皮带吧 04/03 13:08
6F:→ VictorTom:至於正负数造成的>> bit extend问题可以顺便一次学清楚. 04/03 13:08
7F:→ VictorTom: & (00000100)b 写成直式运算会好懂些:) 04/03 13:10
8F:→ VictorTom:糟~~请把13:08的第二行往後移再看XD 04/03 13:10
9F:→ lavanil:懂了 感谢各位 04/03 13:14