本文目录一览:
- 1、C语言中按位与(&)运算符是什么意思
- 2、C语言问题,按位与、按位或、按位异或、按位取反,解释下。
- 3、C语言中按位或,与,非是怎么用的,怎么运算?
- 4、C语言中按位运算和按字节运算,怎么理解这个抽象意思?
- 5、C语言中“按位运算符”是什么意思?
- 6、C语言中什么是按位或运算
C语言中按位与(&)运算符是什么意思
是将二进制数按照位的对应相与,得到一个新的二进制数。1与0为0;1与1为1;0与0为0。
分析如下:
就是二进制的每一位相与。
比如:1010 0011 0000 1111,结果为0000 0011。也就是与上0相当于把那位数清0,与上1相当于把那位保留。
扩展资料:
1、按位与运算符""是双目运算符。 其功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位均为1时,结果位才为1 ,否则为0。参与运算的数以补码方式出现。
例如:95可写算式如下: 00001001 (9的二进制补码)00000101 (5的二进制补码) 00000001 (1的二进制补码)可见95=1。 按位与运算通常用来对某些位清0或保留某些位。例如把a 的高八位清 0 , 保留低八位, 可作 a255 运算 ( 255 的二进制数为11111111)。
参考资料:百度百科:位运算符
C语言问题,按位与、按位或、按位异或、按位取反,解释下。
先说一下布尔值的与、或、异或、反运算:
与运算,两者都为真计算结果为真,反之为假:
1 1 = 1,1 0 = 0,0 1 = 0,0 0 = 0;
或运算,至少其一都为真计算结果为真,反之为假:
1 | 1 = 1,1 | 0 = 1,0 | 1 = 1,0 | 0 = 0;
异或运算,两者不同为真,反之为假:
1 ^ 1 = 0,1 ^ 0 = 1,0 ^ 1 = 1,0 ^ 0 = 0;
取反运算,单目运算符:
~1 = 0,~0 = 1;
以上例子 1 代表真,0 代表假。
按位运算就是将二进制位的每一位进行如上计算。
如 2 | 5,转换为二进制(以 1 字节 8 位为例):
00000010 | 00000101,每个二进制位分别进行或运算后得:
00000111 即 7。虽然 7 = 5 + 2 但不代表 2 | 5 = 2 + 5。
如:2 | 6 = 6,5 | 6 = 7,2 | 4 | 5 | 6 | 7 = 7。
同理,按位与运算 2 5 的结果为 0:
00000010 00000101 = 00000000
按位与运算 2 6 的结果为 2(二进制 00000010):
00000010 00000110 = 00000010。
同样也能算出 2 ^ 6 的结果为 4(二进制 00000101):
00000010 ^ 00000110 = 00000100。
取反运算 ~00000110 = 11111001。
当然,对一个数字进行取反运算结果是多少,还与该类型是有符号还是无符号,占用的字节大小等有关。上面的例子只是以一个字节为例进行说明。
C语言中按位或,与,非是怎么用的,怎么运算?
位运算符
C提供了六种位运算运算符;这些运算符可能只允许整型操作数,即char、short、int和long,无论signed或者unsigned。
按位AND
|
按位OR
^
按位异或
左移
右移
~
求反(一元运算)
按位与操作通常用于掩去某些位,比如
n
=
n
0177;
使得n中除了低7位的各位为0。
按位或操作|用于打开某些位:
x
=
x
|
SET_ON;
使得x的某些SET_ON与相对的位变为1。
按位异或操作^使得当两个操作数的某位不一样时置该位为1,相同时置0。
应该区分位操作符、|与逻辑操作符、||,后者从左到右的评价一个真值。比如,如果x为1、y为2,那么x
y为0,而x
y为1。
移位运算符和将左侧的操作数左移或者右移右操作数给定的数目,右操作数必须非负。因此x
2将x的值向左移动两位,用0填充空位;这相当于乘4。右移一个无符号数会用0进行填充。右移一个带符号数在某些机器上会用符号位进行填充(“算数移位”)而在其他机器上会用0进行填充(“逻辑移位”)。
单目运算符~对一个整数求反;即将每一个1的位变为0,或者相反。比如
x
=
x
~077
将x的后六位置0。注意x
~077的值取决于字长,因此比如如果假设x是16位数那么就是x
0177700。这种简易型式并不会造成额外开销,因为~077是一个常数表达式,可以在编译阶段被计算。
作为一个使用位操作的实例,考虑函数getbits(x,p,n)。它返回以p位置开始的n位x值。我们假设0位在最右边,n和p是正数。例如,getbits(x,4,3)返回右面的4、3、2位。
/*
getbits:
返回从位置p开始的n位
*/
unsigned
getbits(unsigned
x,
int
p,
int
n)
{
return
(x
(p+1-n))
~(~0
n);
}
表达式x
(p+1-n)将需要的域移动到字的右侧。~0是全1;将其左移n为并在最右侧填入0;用~使得最右侧n个1成为掩码。
C语言中按位运算和按字节运算,怎么理解这个抽象意思?
举个例子吧,
按位运算,比如数字4,二进制是00000100,
位运算,左移1位,二进制变成了00001000,变成8了,这就是位运算。
字节运算,忘记了,百度下吧,很多的
C语言中“按位运算符”是什么意思?
位于好比34 3 其二进制为00000011 4其二进制为00000100 34= 0(二进制00000000)00=0,01=0,11=1
|位或 1|1=1,1|0=1,0|0=0
^位异或1^1=0,1^1=0,1^0=1,0^1=1
~按位反 好比3其二进制为00000011 反一下为11111100
左移如32 ,3 其二进制为00000011 向左移2个变为00000000 其十进制为0
右移 跟左移一样的原理
C语言中什么是按位或运算
位运算是在二进制层面上进行的运算
位或就是在两个二进制上进行按位的或运算
像普通的逻辑运算一样 两个里有一个为真就返回真(逻辑真 就是1 逻辑假就是0)
比如两个十进制数 5 和 3 进行位或运算
把他们转换为二进制
5的二进制是 0101
3的二进制是 0011
他们按位或的结果是0111 转换到十进制就是0+4+2+1 是7