c语言位运算

a=1^8
b=32^32
c=7^3
d=4&3
e=4|3
f=1&-1
求值
求详解
求值
为什么等于这么多
我要得是手算

一、位运算符C语言提供了六种位运算符:
& 按位与
| 按位或
^ 按位异或
~ 取反
<< 左移
>> 右移

1. 按位与运算 按位与运算符"&"是双目运算符。其功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位均为1时,结果位才为1 ,否则为0。参与运算的数以补码方式出现。
例如:9&5可写算式如下: 00001001 (9的二进制补码)&00000101 (5的二进制补码) 00000001 (1的二进制补码)可见9&5=1。

按位与运算通常用来对某些位清0或保留某些位。例如把a 的高八位清 0 , 保留低八位, 可作 a&255 运算 ( 255 的二进制数为0000000011111111)。
main(){
int a=9,b=5,c;
c=a&b;
printf("a=%d\nb=%d\nc=%d\n",a,b,c);
}

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

3. 按位异或运算 按位异或运算符“^”是双目运算符。其功能是参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1。参与运算数仍以补码出现,例如9^5可写成算式如下: 00001001^00000101 00001100 (十进制为12)
main(){
int a=9;
a=a^15;
printf("a=%d\n",a);
}

4. 求反运算 求反运算符~为单目运算符,具有右结合性。 其功能是对参与运算的数的各二进位按位求反。例如~9的运算为: ~(0000000000001001)结果为:1111111111110110

5. 左移运算 左移运算符“<<”是双目运算符。其功能把“<< ”左边的运算数的各二进位全部左移若干位,由“<<”右边的数指定移动的位数,
高位丢弃,低位补0。例如: a<<4 指把a的各二进位向左移动4位。如a=00000011(十进制3),左移4位后为00110000(十进制48)。6. 右移运算 右移运算符“>>”是双目运算符。其功能是把“>> ”左边的运算数的各二进位全部右移若干位,“>>”右边的数指定移动的位数。
例如:设 a=15,a>>2 表示把000001111右移为00000011(十进制3)。 应该说明的是,对于有符号数,在右移时,符号位将随同移动。当为正数时, 最高位补0,而为负数时,符号位为1,最高位是补0或是补1 取决于编译系统的规定。Turbo C和很多系统规定为补1。
main(){
unsigned a,b;
printf("input a number: ");
scanf("%d",&a);
b=a>>5;
b=b&15;
printf("a=%d\tb=%d\n",a,b);
}
请再看一例!
main(){
char a='a',b='b';
int p,c,d;
p=a;
p=(p<<8)|b;
d=p&0xff;
c=(p&0xff00)>>8;
printf("a=%d\nb=%d\nc=%d\nd=%d\n",a,b,c,d);
}

参考资料:http://www.52rd.com/Blog/Archive_Thread.asp?SID=16977

温馨提示:内容为网友见解,仅供参考
第1个回答  2009-03-11
^为异或操作,&与操作,|或操作
你没计算器?
可以用windows自带的计算器,开始菜单-->运行-->输入cals,再回车,就可以打开了
第2个回答  2009-03-12
a=9
b=0
c=4
d=0
e=7
f=1
第3个回答  2012-05-02
main(){
char a='a',b='b';
int p,c,d;
p=a;
p=(p<<8)|b;
d=p&0xff;
c=(p&0xff00)>>8;
printf("a=%d\nb=%d\nc=%d\nd=%d\n",a,b,c,d);

C语言-自运算、位运算、取反运算
取反运算使用`~`操作符,它会将一个数的二进制表示中的每一位进行取反操作。例如,`~9`将得到`246`。然而需要注意的是,在C语言中,`246`可能被解释为负数,因为C语言中,二进制表示的最高位用于标识符号位。最后,对于取反运算,针对正数和负数有不同的处理方式。正数取反后,其二进制表示的补...

c语言位运算
C语言提供了位运算符来进行位运算操作,包括位移运算符、位逻辑运算符、取反运算符。这些运算符用于对二进制位进行操作。位运算符概述 C语言中的位运算符用于操作二进制位。这些运算符直接对整数的二进制位进行操作,是低级语言操作的重要组成部分。它们对于优化程序性能、实现特定功能非常关键。具体的位运...

C语言位运算符
C语言提供了六种位操作运算符,用于处理二进制位问题,主要应用于整型数据的处理。以下是这些运算符的详细介绍:C语言中的位运算包括按位与(&)、按位或(|)、异或(^)、取反(~)、左移(<<)和右移(>>)。这些运算符主要用于以下场景:按位与(&): 通过“与”运算清除某个位置的位。清零时,选择...

0基础学习C语言第三章:位运算
在C语言的学习过程中,位运算是一种非常重要的操作。它提供了六种基本位运算符,分别是:按位与(&)、按位或(|)、按位异或(^)、取反(~)、左移(<<)和右移(>>)。下面,我们将深入探讨这些运算符的原理和应用。首先,我们来看按位与运算。按位与运算符"&"用于参与运算的两个数的对应二进位相...

C语言位运算符:与、或、异或、取反、左移和右移!
。6. **右移(>>)**:有符号右移,高位补符号位;无符号右移,高位补0。例如,113755(八进制)右移1位,结果取决于算术移位或逻辑移位。C语言中,位运算符还可以与赋值运算符一起使用,如a &= b,表示a与b按位与后赋值给a。学习这些位运算符能帮助程序员高效地处理二进制数据。

C语言——位运算
C语言中,位运算是一种独特且强大的功能,它直接作用于二进制位级,对数据进行操作。位运算符包括按位取反(~)、左移(<>)、按位与(&)、按位或(|)和按位异或(^)。以下是这些运算符的简介和示例:1. 按位取反(~):单目运算符,将运算数所有位取反,如无符号字符a=18,~a的结果...

C语言位运算
一、位运算符C语言提供了六种位运算符:& 按位与 | 按位或 ^ 按位异或 ~ 取反 << 左移 >> 右移 1. 按位与运算 按位与运算符"&"是双目运算符。其功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位均为1时,结果位才为1 ,否则为0。参与运算的数以补码方式出现。例如:9...

C语言——位运算
本文将介绍C语言中的位运算,它允许程序员直接操作二进制位。二进制位,或“位”,仅包含0或1。在计算机中,数据以二进制形式表示,执行的指令亦是如此。计算机内部的数据以补码形式存储。这意味着,对于数字的二进制表示,最左侧的位(符号位)指示数字是正还是负。位运算包括:取反运算、左移运算、...

C语言 ~(~0<<4)什么意思
C语言中的位运算符~(~0<<4)是一个右移运算,用于处理二进制位的移动。具体来说,它执行以下操作:右移运算符(<<)是一个将二进制位向左移动指定位数的操作。在这个表达式中,~0是一个特殊的二进制数,它的二进制形式是全1(即-1的按位非),然后通过右移4位(<<4)进行操作。这意味着原...

c语言中,如何实现位运算?
c语言:取整型变量x中的第p位开始的n个bit位,可以采用位运算的方法。先向左移位,丢弃前面不需要的位,再通过向后移位,丢弃后面不需要的位,最后再向左移位到原来的位置,就可以了。1\/\/num&(num-1)=(1111)&(1110)=(1110)2\/\/num&(num-1)=(1110)&(1101)=(1100)3\/\/num&(num-1)=(...

相似回答