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

int ret;
if (ret&0x01)
{}
if (ret&0x02)
{}

ret = ret|0x01;
ret = ret|0x02;

很多时候见别人这么用,请问& | 都是怎么用啊,哪位高人能给指点下啊,这样用到底是什么意思啊?

& 和 | 都是位操作。& 就是按位与。| 就是按位或。
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
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-03-23
& 就是按位与,比如ret=3 , 二进制就是 11
ret&0x01 就是 11&01 ,结果=1,这个算法用来测试某个数最后一位是否为1

|是按位或,同理ret|0x02用来将ret的倒数第二位置1本回答被提问者采纳
第2个回答  2011-03-23
&
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
总的来说,你仔细看看位运算就明白了。
第3个回答  2011-03-23
&是按位与,|是按位或。
举个例子,如果ret=1
则ret & 0x01是1,ret & 0x02是0。
ret | 0x01是1,ret | 0x02是3(二进制的11)。你最好把数字展成二进制在操作,就明了了。
第4个回答  2011-03-23
&和|是位运算符;
&按位与,比如(假设都是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。
望采纳。谢谢

c语言程序总运行不了,怎么回事啊?求高人指点。。。下面是我写的程序...
这代码问题很多啊 1、你传递的参数没有按照函数定义的参数类型。比如insert(int score[],int n,int x,int i)但是使用时if(insert(score[N],i,x,*n)==1) 。第一个参数本来是传递数组指针,结果你传递的是一个越界的数组元素,第一个参数应该改为score。第二个和第四个参数至少从名字上看是...

我是一位C语言的初学者,有个问题,请哪位高人指点一下。 mian() {float...
其实C语言只是一门编程语言,要学它,但是不是所有学C语言的人都真正直接拿它写软件,因为他的低层库要求程序员学很多东西。大家都是把C或C++学好了,然后用其它的集成开发环境,比如VC++。如果你只想用C语言编写软件,可能你写一个窗口可能就要用上百条代码,而且还得学很多低层的东西,或者调用操...

一个关于"++"的简单问题 C语言
等价于 int sum = (i = i+1)+(i = i+1);编译器在做加法运算时,会把+号两边的值都求出来,即i的值,也就是5,然后相加,得到的是10。2.至于另外有的编译器,在做加法运算时,则会先把加法的左边值放到寄存器中,即4,然后在求出加号的右边值5,相加得到9。楼上的说很正确,这种问题...

C语言问题~~~if ()else if()..
1)首先第一个问题 if(表达式){ 语句;} else if(表达式){ 语句;} 如果if条件为真。。并且执行了该语句。。那么还会不会继续向下判断else if()语句并执行它??答案是,不会再继续向下判断了。2)第二个问题 你的这个程序,计算的是,字符数,行数和单词数。字符数 n1 很显然,每读一个字符,...

C语言的简单问题23135
include <stdio.h> int main(){ unsigned int x,y;printf("enter x:");scanf("%d,%d",&x,&y);if(x<1000);y=x^(1\/2);printf("x=%d,y=%d\\n",x,y);return 0;}

我是一位C语言的初学者,有个问题,请哪位高人指点一下。 mian() {float...
(1)mian() {float a1=123.456; printf("%d",a1); } 输出float型的数据必须要用%f,%d是输出整形的。(2)如果a和b互换应该要设置多一个变量,例如有2个杯子,a杯和b杯,a装水,b装可乐,如果直接互换是没可能的事,必须借助c杯,a倒进c杯,b倒进a杯,c倒进b被;程序:main(){ in...

C语言编程遇到问题,请求高手指点,是统计区间个数的问题
for(i=1;i<c;i++){ for(j=0;j<最大的个数;j++){ if(a[i]>minin&&a[i]<(minin+division)){ 存储链表 } } minin+=division;在链表中存储一个标记符 } 存储 因为不知道 大小 应该用链表

C语言中scanf的简单问题
scanf("%*f,%f",&g);输入1.0,2.0 没问题,结果为 2.0 另外,scanf()是一个非常复杂的函数, 个人觉得,它是输入输出中最麻烦的, 有时间,多弄弄,找到其原理 怎么读入数据,怎么匹配...

C语言的简单问题 char *p; p="FILE *pfo; pfo=fopen("test.txt","r...
char *p; p="FILE *pfo; pfo=fopen("test.txt","r"); fscanf(pfo,";改成这样 char p[]="FILE *pfo; pfo=fopen(\\"test.txt\\",\\"r\\"); fscanf(pfo,";即,字符串内部的 " 改为 \\" (用转义符)

c语言问题,程序无限循环,不知道怎么改,求高人指点:
这一句for(m=0;m<MAX;k++),k应该是m,这样就不会是死循环了,再有问题找我

相似回答
大家正在搜