c语言的简单问题,高人指点

2024-12-01 00:32:46
推荐回答(5个)
回答(1):

& 和 | 都是位操作。& 就是按位与。| 就是按位或。
ret & 0X01 就是将ret 转换成二进制,然后按位进行与操作。
1. 按位与运算 按位与运算符"&"是双目运算符。其功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位均为1时,结果位才为1 ,否则为0。参与运算的数以补码方式出现。

例如:9&5可写算式如下: 00001001 (9的二进制补码)&00000101 (5的二进制补码) 00000001 (1的二进制补码)可见9&5=1。

按位与运算通常用来对某些位清0或保留某些位。例如把a 的高八位清 0 , 保留低八位, 可作 a&255 运算 ( 255 的二进制数为0000000011111111)。

2. 按位或运算 按位或运算符“|”是双目运算符。其功能是参与运算的两数各对应的二进位相或。只要对应的二个二进位有一个为1时,结果位就为1。参与运算的两个数均以补码出现。
例如:9|5可写算式如下: 00001001|00000101
00001101 (十进制为13)可见9|5=13

回答(2):

& 就是按位与,比如ret=3 , 二进制就是 11
ret&0x01 就是 11&01 ,结果=1,这个算法用来测试某个数最后一位是否为1

|是按位或,同理ret|0x02用来将ret的倒数第二位置1

回答(3):

&
0x01 十六进制, 如果用二进制表示这个数就是 0000 0001
ret & 0x01 那么相当于
ret xxxx xxxx xxxx xxxx
0000 0000 0000 0001
--------------------------------------
0000 0000 0000 000*
如果1上的x为0 那么 *=0 也就是 ret&0x01 = 0
如果1上的x为1 那么 *=1 也就是 ret&0x01 = 1
|运算正好相反了。
ret xxxx xxxx xxxx xxxx
0000 0000 0000 0001
--------------------------------------
xxxx xxxx xxxx xxx1
就相当于将你需要的二进制位置为1
总的来说,你仔细看看位运算就明白了。

回答(4):

&是按位与,|是按位或。
举个例子,如果ret=1
则ret & 0x01是1,ret & 0x02是0。
ret | 0x01是1,ret | 0x02是3(二进制的11)。你最好把数字展成二进制在操作,就明了了。

回答(5):

&和|是位运算符;
&按位与,比如(假设都是2进制),a=1111,b=1011,那么a&b=1011,&的规则是遇到0&0=0,0&1=0,1&0=0,1&1=1。|是按位或。a=1110,b=1011,那么a|b=1111,|的规则是0|0=0,0|1=1,1|0=1,1|1=1。
望采纳。谢谢