您的位置:

c语言按位和非,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。