本文目录一览:
C语言 位运算
~
:取反,0取反是1,1取反是0。<<
:左移,比如1 << n
表示将1左移n位,即数值大小为2
的n
次方。>>
:右移,类似左移,数值大小为除以2
的n
次方。&
:按位与,1与任意数等于任意数本身,0与任意数等于0,即1 & x = x
,0 & x = 0
。|
:按位或,x | y
中只要有一个1则结果为1。^
:按位异或,x ^ y
相等则为0,不等则为1。- 所有数值必须转换为二进制数才能进行位运算,每一位数相对应运算。
c语言位运算
C语言提供了六种位运算符:
&
:按位与|
:按位或^
:按位异或~
:取反<<
:左移>>
:右移
1. 按位与运算
按位与运算符 &
是双目运算符。其功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位均为1时,结果位才为1,否则为0。参与运算的数以补码方式出现。
示例:
int a = 9, b = 5, c;
c = a & b;
printf("a=%d\nb=%d\nc=%d\n", a, b, c);
输出:
a=9
b=5
c=1
2. 按位或运算
按位或运算符 |
是双目运算符。其功能是参与运算的两数各对应的二进位相或。只要对应的二个二进位有一个为1时,结果位就为1。参与运算的两个数均以补码出现。
示例:
int a = 9, b = 5, c;
c = a | b;
printf("a=%d\nb=%d\nc=%d\n", a, b, c);
输出:
a=9
b=5
c=13
3. 按位异或运算
按位异或运算符 ^
是双目运算符。其功能是参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1。参与运算数仍以补码出现。
示例:
int a = 9;
a = a ^ 15;
printf("a=%d\n", a);
输出:
a=6
4. 求反运算
求反运算符 ~
为单目运算符,具有右结合性。其功能是对参与运算的数的各二进位按位求反。例如 ~9
的运算为:
~(0000000000001001) => 1111111111110110
5. 左移运算
左移运算符 <<
是双目运算符。其功能是把 <<
左边的运算数的各二进位全部左移若干位,由 <<
右边的数指定移动的位数,高位丢弃,低位补0。
示例:
int a = 3; // 二进制为 00000011
int b = a << 4; // 左移4位后为 00110000 (十进制48)
6. 右移运算
右移运算符 >>
是双目运算符。其功能是把 >>
左边的运算数的各二进位全部右移若干位,>>
右边的数指定移动的位数。
示例:
int a = 15; // 二进制为 00001111
int b = a >> 2; // 右移2位后为 00000011 (十进制3)
示例代码
unsigned a, b;
printf("input a number: ");
scanf("%d", &a);
b = a << 5;
b = b >> 15;
printf("a=%d\tb=%d\n", a, b);
另一个示例
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语言之中的位运算符是怎么运算的呢?
C语言提供了以下6种位运算符以及5种扩展运算符:
表12-1 位运算符
运算符 | 含义 | 优先级 |
---|---|---|
~ | 按位求反 | 高 |
<< | 左移 | 低 |
>> | 右移 | |
& | 按位与 | |
^ | 按位异或 | |
| | 按位或 |
表12-2 扩展运算符
扩展运算符 | 等价表达式 |
---|---|
&= | a &= 2 |
>>= | b >>= 1 |
<<= | a <<= b |
^= | a ^= b |
|= | a |= b |
说明:
- 位运算符中,只有“反求”(
~
)是单目运算符,其余均为双目运算符。 - 运算对象只能是整型或字符型数据。
- 参与运算时,操作数都必须首先转换成二进制形式,然后再执行相应的按位运算。
- 各双目运算符与赋值运算符结合可以组成扩展的赋值运算符。
12.2 位运算符详解
12.2.1 按位与运算
按位与运算 &
的运算格式:
操作数1 & 操作数2
说明:
- 其中“操作数1”和“操作数2”必须是整型或字符型数据。
- 当参加运算的两个二进制数的对应位都为1,则该位的结果为1,否则为0,即
0 & 0 = 0
,0 & 1 = 0
,1 & 0 = 0
,1 & 1 = 1
。
示例:
4 & 5 的运算如下:
00000100 (4)
00000101 (5)
00000100 (4)
因此,4 & 5 的值为4。
常见功能:
- 清零:如果想将一个数的全部二进制置为零,只要找一个二进制数,其中各位要符合以下条件:原来的数中为1的位,新数中相应的位为0。然后使二者进行按位与运算即可达到清零的目的。
- 取一个数中某些指定位:例如有一个两字节的短整型数
x
,想要取其中的低字节,只要将x
与八进制数377
按位与即可。 - 保留一个数的某些位:要想将哪一位保留下来,就与一个数进行运算,此数在该位取1。
C语言位运算
不是按位与,是按位或。 就是把二进制的每一位进行或运算,也就是只要有一个是1,值就是1,都是0值才是0。 示例:
int a = 1, b = 2;
int c = a | b;
二进制表示:
00000000 00000000 00000000 00000001 |
00000000 00000000 00000000 00000010 =
00000000 00000000 00000000 00000011
按位与正好相反,是有一个0值就是0,只有都是1值才是1。 按位异或是两者相同为0,不相同为1。 按位取反就是0变成1,1变成0。 int型是多大与CPU有关,现在的主流机器都是32位的,先进的都64位了。
C语言中的位运算是怎样的
C语言是为描述系统而设计的,它的第一个应用就是UNIX操作系统的设计,因此必须具有低级语言的特点。指针运算和位运算就是其代表。
我们知道,计算机中的信息以及控制信号均是以二进制码的0、1的形式存储和处理的。每一个0或1称为一个“位”(bit),8位构成一个字节(byte)。在内存中,每一个字节均有一个编号,称为内存地址。
在以前的各章节中,我们都是将一个字节(如字符型)和若干字节(如整型、实型等)中的内容作为一个整体进行处理的(赋值、运算、I/O操作)。
位运算则是针对这些字节中的若干位进行操作。这在系统软件设计中和自动控制中是十分有用的。
C语言的位运算符有 ~
、<<
、>>
、&
、|
、^
共6个,并可与赋值运算符相结合(除 ~
外)成为位运算赋值操作。
注意:
- 参与位运算的量只能是整型和字符型。
c语言的位符号 都是怎么运算的啊
C语言提供的位运算符列表:
运算符 | 含义 | 描述 |
---|---|---|
& | 按位与 | 如果两个相应的二进制位都为1,则该位的结果值为1,否则为0 |
| | 按位或 | 两个相应的二进制位中只要有一个为1,该位的结果值为1 |
^ | 按位异或 | 若参加运算的两个二进制位值相同则为0,否则为1 |
~ | 取反 | ~ 是一元运算符,用来对一个二进制数按位取反,即将0变1,将1变0 |
<< | 左移 | 用来将一个数的各二进制位全部左移N位,右补0 |
>> | 右移 | 将一个数的各二进制位右移N位,移到右端的低位被舍弃,对于无符号数,高位补0 |