c语言位运算符

C语言既具有高级语言的特点,又具有低级语言的功能。

所谓位运算是指进行二进制位的运算。

C语言提供的位运算:

运算符   含义  
&   按位与  
|   按位或  
∧   按位异或  
∽   取反  
<<   左移  
>>   右移

说明:

1。位运算符中除∽以外,均为二目(元)运算符,即要求两侧各有一个运算了量。

2、运算量只能是整形或字符型的数据,不能为实型数据。

“按位与”运算符(&)

规定如下:

0&0=0   0&1=0   1&0=0   1&1=1

例:3&5=?
                         先把3和5以补码表示,再进行按位与运算。

3的补码:   00000011  
5的补码:   00000101

&:   00000001

3&5=1

--------------------------------------------------------------------------------

“按位或”运算符(|)

规定如下:

0|0=0   0|1=1   1|0=1   1|1=1

例:060|017=?
                         将八进制数60与八进制数17进行按位或运算。

060   00110000  
017   00001111

|:   00111111

060|017=077

--------------------------------------------------------------------------------

“异或”运算符(∧),也称XOR运算符

规定如下:

0∧0=0   0∧1=1   1∧0=1   1∧1=0

例:57∧42=?
                         将十进制数57与十进制数42进行按位异或运算。

57   00111001  
42   00101010

∧:   00010011

57∧42=19

--------------------------------------------------------------------------------

“取反”运算符(∽)

规定如下:

∽0=1   ∽1=0

例:∽025=?
                         对八进制数25(即二进制0000000000010101)按位求反。

0000000000010101  
↓  
1111111111101010

∽025=177752

--------------------------------------------------------------------------------

左移运算符(<<)

 

将一个数的二进位全部左移若干位,若高位左移后溢出,则舍弃,不起作用。

例:a=a<<2
                         将a的二进制数左移2位,右补0。
                         若a=15,即二进制数00001111,则

a   00001111  
↓   ↓  
a<<1   00011110  
↓   ↓  
a<<2   00111100

最后a=60

--------------------------------------------------------------------------------

右移运算符(>>)

 

将一个数的二进位全部右移若干位,低位移出部分舍弃。

例:a=a>>2
                         将a的二进制数右移2位,左补0。
                         若a=15,即二进制数00001111,则

a   00001111  
↓   ↓  
a>>1   00000111  
↓   ↓  
a>>2   00000011

最后a=3

--------------------------------------------------------------------------------

位运算符与赋值运算符结合可以组成扩展的赋值运算符

如:&=,|=,>>=,<<=,∧=

例:a&=b相当于a=a&b

a<<=2相当于a=a<<2

不同长度的数据进行位运算

如果两个数据长度不同(例如long型和int型)进行位运算时(如a&b,而a为long型,b为int型),系统会将二者按右端对齐。如果b为正数,则左侧16位补满0。若b为负,左端应补满1。如果b为无符号整数型,则左端添满0。

位运算举例
         例:取一个整数a从右端开始的4∽7位

考虑如下:1、先是a右移4位,即a>>4

2、设置一个低4位全为0的数,即∽(∽0<<4)

3、将上面两式进行与运算,即a>>4&∽(∽0<<4)

程序如下:

main()

{unsigned   a,b,c,d;

scanf("%o",&a);

b=a>>4;

c=∽(∽0<<4);

d=b&c;

printf("%o\n%o\n",a,b);

}

结果:331

331(a的值,八进制)

15   (d的值,八进制)

例:循环移位。要求将a进行右循环移位。即a右循环移n位,将a中原来左面(16-n)位右移n位。现假设两个字节存放一个整数。如右图。

考虑如下:1、先将a右端n位放到b中的高n位中,即:b=a<<(16-n)

2、将a右移n位,其左面高位n位补0,即c=a>>n

3、将c与b进行按位或运算,即c=c|b

程序如下:

main()

{unsigned   a,b,c;int   n:

scanf("a=%o,n=%d",&a,&n);

b=a<<(16-n);

c=a>>n;

c=c|b;

printf("%o\n%o",a,c);

}

结果:a=157653,n=3

331(a的值,八进制)

15   (d的值,八进制)

位段
所谓位段是以位为单位定义长度的结构体类型中的成员。

例:struct   packed-data

{unsigned   a:2;

unsigned   b:6;

unsigned   c:4;

unsigned   d:4;

int             i;

}data;

时间: 2024-08-10 23:17:24

c语言位运算符的相关文章

C语言位运算符:与、或、异或、取反、左移和右移

语言位运算符:与.或.异或.取反.左移和右移 位运算是指按二进制进行的运算.在系统软件中,常常需要处理二进制位的问题.C语言提供了6个位操作运算符.这些运算符只能用于整型操作数,即只能用于带符号或无符号的char,short,int与long类型. C语言提供的位运算符列表:运算符 含义 描述& 按位与 如果两个相应的二进制位都为1,则该位的结果值为1,否则为0| 按位或 两个相应的二进制位中只要有一个为1,该位的结果值为1^ 按位异或 若参加运算的两个二进制位值相同则为0,否则为1~ 取反 ~

【转】C语言位运算符:与、或、异或、取反、左移与右移详细介绍

转载自:http://www.jb51.net/article/40559.htm,感谢原作者. 以下是对C语言中的位运算符:与.或.异或.取反.左移与右移进行了详细的分析介绍,需要的朋友可以过来参考下 位运算是指按二进制进行的运算.在系统软件中,常常需要处理二进制位的问题.C语言提供了6个位操作运算符.这些运算符只能用于整型操作数,即只能用于带符号或无符号的char,short,int与long类型. C语言提供的位运算符列表:运算符 含义 描述& 按位与 如果两个相应的二进制位都为1,则该位

C语言位运算符:与、或、异或、取反、左移与右移详细介绍

位运算是指按二进制进行的运算.在系统软件中,常常需要处理二进制位的问题.C语言提供了6个位操作运算符.这些运算符只能用于整型操作数,即只能用于带符号或无符号的char,short,int与long类型. C语言提供的位运算符列表:& 按位与, 如果两个相应的二进制位都为1,则该位的结果值为1,否则为0| 按位或, 两个相应的二进制位中只要有一个为1,该位的结果值为1^ 按位异或, 若参加运算的两个二进制位值相同则为0,否则为1~ 取反, ~是一元运算符,用来对一个二进制数按位取反,即将0变1,将

Java千问:Java语言位运算符详解

很多编程语言都有位运算符,Java语言也不例外.在Java语言中,提供了7种位运算符,分别是按位与(&).按位或(|).按位异或(^).取反(~).左移(<<).带符号右移(>>)和无符号右移(>>>).这些运算符当中,仅有~是单目运算符,其他运算符均为双目运算符.在讲解这些运算符的使用之前,必须了解一个常识,那就是:位运算符是对long.int.short.byte和char这5种类型的数据进行运算的,我们不能对double.float和boolean进

基础知识复习(一)——C语言位运算符详解

常用的位运算符:与(&),取反(~),或(|),异或(^),左移(«),右移(») 1. 与(&)操作符,按位与,全为1 时,结果取1 11001 &10011 结果:10001 2. 取反(~),为1,则取0,为0则取1,如: 10010 取反 01101 3. 或(|),两个数均为0时取0,其他情况为1 10010 11100 结果:11110 4. 异或(^),如果某位不同则取1,否则为0. 10010 11100 异或:01110 xor运算的逆运算是它本身,也就是说两次异

C语言的各种位运算符的操作简述

运算符: 算术运算符: + , - , * , / , % , ++ , -- 符合运算符: += , *= , /= , %= 条件运算符:  ? : 关系运算符: == , >= , <= , != , > , < 逻辑运算符: && , || , ! 赋值运算符: = 其他运算符: * , & , -> , . 位运算符: 1 > 按位与 &同时为一则为一 否则为零 3 & 5结果为 1(先将两个数化为二进制在进行计算) 3

黑马程序员——c语言学习心得——位运算符

黑马程序员——c语言学习心得——位运算符 -------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 位运算符C语言提供了六种位运算符: & 按位与 | 按位或 ^ 按位异或 ~ 取反 << 左移 >> 右移 1. 按位与运算 按位与运算符"&"是双目运算符.其功能是参与运算的两数各对应的二进位相与.只有对应的两个二进位均为1时,结果位才为1 ,否则为0.参与运算的数以补码方式出现. 例如:9&

黑马程序员——c语言学习心得——位运算符a

黑马程序员——c语言学习心得——位运算符 -------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- c语言中经常需要通过函数传递二维数组,有三种方法可以实现,如下: 方法一, 形参给出第二维的长度. 例如: #include <stdio.h>void func(int n, char  str[ ][5] ){int i;for(i = 0; i < n; i++)  printf("/nstr[%d] = %s/n"

c语言基础表达式, 关系运算符, 逻辑运算符, 位运算符, 数据的取值范围, 分支结构(if...else, switch...case)

1.表达式: 表达式的判断是有无结果(值), 最简单的表达式是一个常量或变量, 如:12, a, 3 + 1, a + b, a + 5 都是表达式 2.BOOL(布尔)数据类型: c语言中除了基本数据类型, 还有BOO数据类型, 以及一些其它的数据类型, 如自定义的结构体数据类型 BOOL数据类型是一种表示非真即假的数据类型, 布尔类型的变量只有YES和NO两个值. YES表示表达式结构为真, 反之, NO表示表达式结果为假(在c语言中, 认为非0即为真), BOOL类型主要用与分支结构或循环