本文目录一览:
- 1、c语言 按位非运算
- 2、C语言的逻辑运算和按位运算怎么区分?
- 3、c语言中为什么会定义按位非、按位与、等等这种计算方法有什么作用?
- 4、C语言中按位或,与,非是怎么用的,怎么运算?
- 5、C语言的按位与、或、非、异或都什么意思。有什么用
- 6、求c语言,与,或,非运算函数
c语言 按位非运算
记住:
正数的补码=正数 本身
负数的补码 = 本身去反 +1
///////////////////////
x=13 的补码00001101
~x : 11110010
第一位是符号位,因为x声明为int,所以,第一位是1,表明是负数
其他位:
1110010
取反
0001101 =13
+1
0001110=14
结果 是 -14(符号为为负数)
注:
如果x是unsigned int
那么 ~x=4294967282
/////////////////////////
还有一个按位右移运算,假如是00001101,右移后结果是00000011么?
如果是右移动 2 位的话,结果是00000011
过程:
00001101
右移1位
00000110 丢失 1
右移2位
00000011 丢失 0
结果 ------00000011
C语言的逻辑运算和按位运算怎么区分?
可以按照符号的不同来区分,C语言中逻辑运算符和按位运算符的符号是不一样的
C语言中提供了三种逻辑运算符:(与运算),
||(或运算),
!(非运算)
与运算符()和或运算符(||)均为双目运算符。具有左结合性。非运算符(!)为单目运算符,具有右结合性
C语言提供了六种位运算符:
|
^
~
按位与
按位或
按位异或
取反
左移
右移
c语言中为什么会定义按位非、按位与、等等这种计算方法有什么作用?
比如图像处理经常遇到需要按bit进行操作的代码段,如果c不提供对bit进行操作的关键字或函数的话,那就需要链接汇编等低级语言了。比较麻烦。c保留了这类的操作,对于编程人员是好事,同时程序员也可以通过c直接对硬件低层进行操作。
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语言的按位与、或、非、异或都什么意思。有什么用
这些是位操作运算符:参与运算的量,按二进制位进行运算。
在计算机中,数据都是以二进制数形式存放的,位运算就是指对存储单元中二进制位的运算。C语言提供6种位运算符。
包括位与()、位或(|)、位非(~)、位异或(^)、左移()、右移()六种。
位运算符 |~ ∧ 按优先级从高到低排列的顺序是:
位运算符中求反运算“~“优先级最高,而左移和右移相同,居于第二,接下来的顺序是按位与 ““、按位异或 “∧“和按位或 “|“。顺序为~ ∧ | 。
扩展资料:
例:设二进制数a是00101101 ,若通过异或运算a∧b 使a的高4位取反,低4位不变,则二进制数b是。
解析:异或运算常用来使特定位翻转,只要使需翻转的位与1进行异或操作就可以了,因为原数中值为1的位与1进行异或运算得0 ,原数中值为0的位与1进行异或运算结果得1。而与0进行异或的位将保持原值。异或运算还可用来交换两个值,不用临时变量。
如 int a=3 , b=4;,想将a与b的值互换,可用如下语句实现:
a=a∧b;
b=b∧a;
a=a∧b;
所以本题的答案为: 11110000 。
参考资料来源:百度百科-C语言
求c语言,与,或,非运算函数
按位“与”、“或”和“非”运算是C/C++中标准运算符,不需要另外编写函数。
与运算: c = a b;
或运算: c = a | b;
非运算: ~a;
非运算: ~b
另外,!是逻辑运算符,对于a,如果a 为 0,!a = 1,如果a 不为 0,则!a = 0。