什么是位运算

作者&投稿:苌宇 (若有异议请与网页底部的电邮联系)
按位运算作用是什么~

按位运算符的作用就是直接对整数在内存中的二进制位进行操作。将一个地址和一个10H进行按位,具体要看在哪一种程序语言中,以及使用哪一种类型的按位运算符。
按位与运算符"&"是双目运算符。其功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位均为1时,结果位才为1 ,否则为0。参与运算的数以补码方式出现。
例如:9&5可写算式如下: 00001001 (9的二进制补码)&00000101 (5的二进制补码) 00000001 (1的二进制补码)可见9&5=1。
按位与运算通常用来对某些位清0或保留某些位。例如把a 的高八位清 0 , 保留低八位, 可作 a&255 运算 ( 255 的二进制数为0000000011111111)。

扩展资料:
C语言中,按位运算符的运算优先级共分为15 级。1 级最高,15 级最低。在表达式中,优先级较高的先于优先级较低的进行运算。而在一个运算量两侧的按位运算符优先级相同时,则按运算符的结合性所规定的结合方向处理。“ & ”按位与运算符属于十级,优先级较低。
按位运算符中的树状数组是一个查询和修改复杂度都为log(n)的数据结构。主要用于查询任意两位之间的所有元素之和,但是每次只能修改一个元素的值;经过简单修改可以在log(n)的复杂度下进行范围修改,但是这时只能查询其中一个元素的值(如果加入多个辅助数组则可以实现区间修改与区间查询)。
参考资料来源:百度百科—位运算

<<位左移运算符,用来把操作数的各个二进制位全部左移若干位,高位丢弃,低位补0

位,它是什么?你可能会问。

简单来说,位就是1和0,在电脑中做的每一件事都是由它们组成的。电脑中所有的数据使用的是位。一个字节由8个位组成;一个字由两个字节组成,即16个位;而一个双字由四个字节组成,即32个位。

0 1 0 0 0 1 1 1 1 0 0 0 0 1 1 1 0 1 1 1 0 1 0 0 0 1 1 1 1 0 0 0
||..............|...............|...............|..............||
|+- bit 31......|...............|...............|.......bit 0 -+|
|...............|...............|...............|...............|
+-- BYTE 3 -----+--- BYTE 2 ----+--- BYTE 1 ----+-- BYTE 0 -----+
|...............................|...............................|
+----------- WORD 1 ------------+----------- WORD 0 ------------+
|...............................................................|
+--------------------------- DWORD -----------------------------+

使用字节,字或者双字来进行位操作显得比较美观,就像使用一个小型数组或结构。使用位运算,可以检查或设置单独某一位的值或组位的值。

十六进制数和位的关系

人们发现,使用二进制计数法表示数字比较的困难。为避免这一问题,采用十六进制计数法(基数为16)。十六进制的一位数字从0到15分别用二进制的四位来表示。四位一组,即半字节。一个字节有两个半字节,则可以用两位十六进制数表示一个字节的值。

半字节 十六进制数
====== =========
0000........0
0001........1
0010........2
0011........3
0100........4
0101........5
0110........6
0111........7
1000........8
1001........9
1010........A
1011........B
1100........C
1101........D
1110........E
1111........F

如果有一个字节,内容为字母‘r’(ASCII 码 114),则表示如下:

0111 0010 二进制数
7 2 十六进制数

记为:0x72

位运算符

共有6种位运算符,如下:

& 与运算符
| 或运算符
^ 异或运算符
~ 取反运算符
>> 右移运算符
<< 左移运算符

& 运算符

&(与)运算要求有两个运算值,然后返回一个值,当且仅当两个运算值都位1时,返回值为1。如下表:

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

一个字节可以包含位标志,而使用与运算可以通过设置掩码来检查某位的值。算法如下:它用来判断字节中的第四位是否为1

BYTE b = 50;
if ( b & 0x10 )
cout << "Bit four is set" << endl;
else
cout << "Bit four is clear" << endl;

通过以下计算可以得到结果:

....00110010 - b
& 00010000 - & 0x10
----------
....00010000 - result

所以,第四位为1。

| 运算符

|(或)运算符要求两个运算值,然后返回一个值,当且仅当两个运算值中有一个为1或都为1时,返回值为1。如下表:

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

使用或运算可以保证字节中的某位为1。算法如下:它用来保证第二位总是为1

BYTE b = 50;
BYTE c = b | 0x04;
cout << "c = " << c << endl;

通过以下计算可以得到结果:

....00110010 - b
| 00000100 - | 0x04
----------
....00110110 - result

^ 异或运算符

^ (异或)运算符要求有两个运算值,然后返回一个值,当且仅当两个运算值中有一个为1但不同时为1时,返回值为1。如下表:

1 ^ 1 == 0
1 ^ 0 == 1
0 ^ 1 == 1
0 ^ 0 == 0

使用异或运算可以翻转特定的位。即0变1,1变0。算法如下:翻转第三和第四位

BYTE b = 50;
cout << "b = " << b << endl;
b = b ^ 0x18;
cout << "b = " << b << endl;
b = b ^ 0x18;
cout << "b = " << b << endl;

通过以下计算可以得到结果:

....00110010 - b
^ 00011000 - ^ 0x18
----------
....00101010 - result

00101010 - b
^ 00011000 - ^ 0x18
----------
....00110010 - result

~ 取反运算符

~(取反)运算符只要求一个运算值,然后将所有的1变成0,所有的0变成1。使用取反运算可以将某些字节置0,确保其它字节置1,而不用考虑

数据的大小。算法如下:将所有位置1,而第一和第零位置0

BYTE b = ~0x03;
cout << "b = " << b << endl;
WORD w = ~0x03;
cout << "w = " << w << endl;

通过以下计算可以得到结果:

00000011 - 0x03
11111100 - ~0x03 b

0000000000000011 - 0x03
1111111111111100 - ~0x03 w

同&(与)运算符一起使用,可以使任意位置0。算法如下:将第四位置0

BYTE b = 50;
cout << "b = " << b << endl;
BYTE c = b & ~0x10;
cout << "c = " << c << endl;

通过以下计算可以得到结果:

....00110010 - b
& 11101111 - ~0x10
----------
....00100010 - result

>>和<< 右移和左移运算符

>>(右移)运算符和<<(左移)运算符将数据右移或左移若干位。>>右移运算从高位往低位移,<<左移运算从低位往高位移。

BYTE b = 12;
cout << "b = " << b << endl;
BYTE c = b << 2;
cout << "c = " << c << endl;
c = b >> 2;
cout << "c = " << c << endl;

通过以下计算可以得到结果:

00001100 - b
00110000 - b << 2
00000011 - b >> 2

位段

位段是位运算中比较令人感兴趣的部分。使用位段可以在一个字节,字或双字内设置小型结构。例如:要记录日期,要求尽可能少的使用内存,则可以采用如下的结构申明:

struct date_struct {
BYTE day : 5, // 1 to 31
month : 4, // 1 to 12
year : 14; // 0 to 9999
} date;

在上面的例子中,日占据了最低的5位,月份占据了接下来的4位,年份为接下来的14位。则整个日期储存在三个字节的23位中。第二十四位被忽略。如果使用整形申明则将占据12个字节。

|0 0 0 0 0 0 0 0|0 0 0 0 0 0 0 0|0 0 0 0 0 0 0 0|
| | | |
+------ year ---------------+ month +-- day --+

如上所述,date类型使用的位段结构。这里使用的是BYTE。一BYTE为8位,使用的时候,编译器将申请一个BYTE来储存。如果结构超过8位,编译器将再申请一个BYTE,直到足够用来储存结构。如果使用字或双字,编译器将总共申请32位用来储存结构。

怎样申明位段?首先申明位段变量,跟着冒号,然后是分配给变量的位数;每位段用逗号分隔,最后用分号表示申明结束。

完成结构申明后,则可以通过存取标记方便的使用结构,同时也可以使用地址操作符使用结构的地址对结构进行操作。如下:

date.day = 12;

dateptr = &date;
dateptr->year = 1852;

位运算就是对二进制位的移动,与,非,或等操作!

二进制的逻辑或算术运算
比如移位,加减
与、或、非


一般指二进制数左移和右移

就是可以一位一位

还是自己看吧:
http://www.meye.com.cn/nizvoo/aoestudio/detail.asp?id=1276


什么是位操作?
位操作是指对 位 进行逻辑操作,包括与,或,非,异或,同或等操作.或操作,当操作数为1时,结果为1,当操作数为0时,结果不变.与操作,当操作数为1时,结果不变,当操作数为0时,结果为0 比如,设置a的bit 3为1的方法可以将a和00001000作或操作,这样其他位都不变,只有第3位变成1 清除a的bit3的方法...

按位运算与逻辑运算异同点是什么
位运算,就是对应的bit参与运算,结果是整形数 逻辑运算,是两个逻辑变量(值只有0和1)参与运行,结果是逻辑值

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

|是什么意思?
“|”在C语言中表示按位或,是双目运算符。其功能是参与运算的两数各对应的二进位(也就是最后一位)相或。只要对应的二个二进位有一个为1时,结果位就为1。参与运算的两个数均以补码出现。例如:13|17可写算式如下:

在C语言中,&,丨,^的运算规则是什么
1 & 0 = 0 1 & 1 = 1 2、|:位或运算,遇1得1,即 0 | 0 = 0 0 | 1 = 1 1 | 0 = 1 1 | 1 = 1 3、^:异或运算,在或的基础上1异或1得0 0 ^ 0 = 0 1 ^ 0 = 1 0 ^ 1 = 1 1 ^ 1 = 0 \/\/这是与或不同的地方。4、注意,在C语言中,位运算只能操作...

C语言中的位运算有什么优点?
位运算主要是直接操控二进制时使用 ,主要目的是节约内存,使你的程序速度更快,还有就是对内存要求苛刻的地方使用,以下是一牛人总结的方法,分享一下:位运算应用口诀 清零取反要用与,某位置一可用或 若要取反和交换,轻轻松松用异或 移位运算 要点 1 它们都是双目运算符,两个运算分量都是整形,...

位运算符和&有什么区别?
在C语言中,&和|是位运算符,用于操作二进制数。&运算符用于逻辑与运算,表示“与”的关系。例如,0 & 0的结果是0,1 & 0的结果是0,0 & 1的结果是0,1 & 1的结果是1。如果两个操作数的第n位都为1,那么结果的第n位为1;否则,结果的第n位为0。|运算符用于逻辑或运算,表示“或”...

pascal中位运算符有哪些?是什么意思?
即是 and 必须是 True and True 才成立,为True(1),否则为False(0),如110 和101从右数第一位1,0取0,第二位0,1取0,第三位1,1取1,即为100,等于4.其他的也是,or就是“或”,and是“与”,xor是“异或”,即True and False exit True else exit False。这就是位运算。

位运算符&&表示什么?
“&&”(逻辑与)是逻辑运算符。 “逻辑与”相当于生活中说的“并且”,就是两个条件都同时成立的情况下“逻辑与”的运算结果才为“真”。“&”是位运算符。与运算(&)双目运算。二个位都置位(等于1)时,结果等于1,其它的结果都等于0。1 & 1 == 1 1 & 0 == ...

什么是算术运算?什么是关系运算?什么是逻辑运算?
4. 位操作运算:参与运算的量,按二进制位进行运算。包括位与(&)、位或(|)、位非(~)、位异或(^)、左移(<<)、右移(>>)六种。5. 赋值运算:用于赋值运算,分为简单赋值(=)、复合算术赋值(+=,-=,*=,\/=,%=)和复合位运算赋值(&=,|=,^=,>>=,<<=)三类共十一种。6. 条件...

淮北市18282412555: 位运算 - 搜狗百科
林贤咖斯: 位运算通常是指对2进制数的运算,常见的位运算符有 & 按位与 | 按位或 ^ 按位异或 ~ 取反 > 右移 M>1是将M转化为2进制数,向右移动一位.

淮北市18282412555: 什么叫位运算 -
林贤咖斯: 程序中的所有数在计算机内存中都是以二进制的形式储存的.位运算说穿了,就是直接对整数在内存中的二进制位进行操作.比如,and运算本来是一个逻辑运算符,但整数与整数之间也可以进行and运算.举个例子,6的二进制是110,11的二进制是1011,那么6 and 11的结果就是2,它是二进制对应位进行逻辑运算的结果(0表示False,1表示True,空位都当0处理).

淮北市18282412555: 什么是位运算?
林贤咖斯: 位就是1和0,在电脑中做的每一件事都是由它们组成的.电脑中所有的数据使用...使用位运算,可以检查或设置单独某一位的值或组位的值. 十六进制数和位的关系

淮北市18282412555: C语言什么是位运算 -
林贤咖斯: C语言是为描述系统而设计的,它的第一个应用就是UNIX操作系统的设计,因此必须具有低级语言的特点.指针运算和位运算就是其代表. 我们知道,计算机中的信息以及控制信号均是以二进制码的0、1的形式存储和处理的.每一个0或1称为...

淮北市18282412555: 什么是位运算?什么是逻辑运算 -
林贤咖斯: 位运算的运算分量只能是整型或字符型数据,位运算把运算对象看作是由二进位组成的位串信息,按位完成指定的运算,得到位串信息的结果. 位运算符有: &(按位与)、|(按位或)、^(按位异或)、~ (按位取反). 其中,按位取反运算...

淮北市18282412555: 什么叫做位运算? -
林贤咖斯: 什么是位运算? 程序中的所有数在计算机内存中都是以二进制的形式储存的.位运算说穿了,就是直接对整数在内存中的二进制位进行操作.比如,and运算本来是一个逻辑运算符,但整数与整数之间也可以进行and运算.举个例子,6的二进...

淮北市18282412555: 位运算<<是什么 -
林贤咖斯: <

淮北市18282412555: php 位运算符概念,求解释 -
林贤咖斯: 位运算就是直接计算二进制 比如1 的二进制是 0x000012 的二进制是 0x000104 的二进制是 0x00100 假设我们要记录一个状态,总共有三种状态,可以多选,这样使用位运算就非常方便.$flag = 0;//给flag加两个状态$flag |= 0x00001;$flag |= 0x00101;//此时$flag的值为0x00101 要判断$flag是否具有哪些属性 那么就可以使用 if($flag && 0x00001) //判断是否含有1 if($flag>>1 && 0x00001) //判断是否含有2 if($flag>>2 && 0x00001) //判断是否含有4 希望我的回答能帮助你

淮北市18282412555: C语言什么叫做位运算符 -
林贤咖斯: 移位,按位与,按位或,取反等等..当要对2进或者其他码进行运算时候要用到..如果你学到硬件编程,你就知道位运算的用处了..我是搞单片机的,经常要用到位运算..

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网