本文目录一览:
- 1、C语言 位运算
- 2、c语言位运算
- 3、c语言之中的位运算符是怎么运算的呢?
- 4、C语言位运算
- 5、C语言中的位运算是怎样的
- 6、c语言的位符号 都是怎么运算的啊
C语言 位运算
~取反,0取反是1,1取反是0
是左移,比如1n,表示1往左移n位,即数值大小2的n次方
右移,类似左移,数值大小除以2的n次方
按位与,1与任意数等于任意数本身,0与任意数等于0,即1x=x,0x=0
|按位或,x|y中只要有一个1则结果为1
^按位异或,x^y相等则为0,不等则为1
所有数值必须转换为二进制数才能位运算,每一位数相对应运算
c语言位运算
一、位运算符C语言提供了六种位运算符:
按位与
| 按位或
^ 按位异或
~ 取反
左移
右移
1. 按位与运算 按位与运算符""是双目运算符。其功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位均为1时,结果位才为1 ,否则为0。参与运算的数以补码方式出现。
例如:95可写算式如下: 00001001 (9的二进制补码)00000101 (5的二进制补码) 00000001 (1的二进制补码)可见95=1。
按位与运算通常用来对某些位清0或保留某些位。例如把a 的高八位清 0 , 保留低八位, 可作 a255 运算 ( 255 的二进制数为0000000011111111)。
main(){
int a=9,b=5,c;
c=ab;
printf("a=%d\nb=%d\nc=%d\n",a,b,c);
}
2. 按位或运算 按位或运算符“|”是双目运算符。其功能是参与运算的两数各对应的二进位相或。只要对应的二个二进位有一个为1时,结果位就为1。参与运算的两个数均以补码出现。
例如:9|5可写算式如下: 00001001|00000101
00001101 (十进制为13)可见9|5=13
main(){
int a=9,b=5,c;
c=a|b;
printf("a=%d\nb=%d\nc=%d\n",a,b,c);
}
3. 按位异或运算 按位异或运算符“^”是双目运算符。其功能是参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1。参与运算数仍以补码出现,例如9^5可写成算式如下: 00001001^00000101 00001100 (十进制为12)
main(){
int a=9;
a=a^15;
printf("a=%d\n",a);
}
4. 求反运算 求反运算符~为单目运算符,具有右结合性。 其功能是对参与运算的数的各二进位按位求反。例如~9的运算为: ~(0000000000001001)结果为:1111111111110110
5. 左移运算 左移运算符“”是双目运算符。其功能把“ ”左边的运算数的各二进位全部左移若干位,由“”右边的数指定移动的位数,
高位丢弃,低位补0。例如: a4 指把a的各二进位向左移动4位。如a=00000011(十进制3),左移4位后为00110000(十进制48)。6. 右移运算 右移运算符“”是双目运算符。其功能是把“ ”左边的运算数的各二进位全部右移若干位,“”右边的数指定移动的位数。
例如:设 a=15,a2 表示把000001111右移为00000011(十进制3)。 应该说明的是,对于有符号数,在右移时,符号位将随同移动。当为正数时, 最高位补0,而为负数时,符号位为1,最高位是补0或是补1 取决于编译系统的规定。Turbo C和很多系统规定为补1。
main(){
unsigned a,b;
printf("input a number: ");
scanf("%d",a);
b=a5;
b=b15;
printf("a=%d\tb=%d\n",a,b);
}
请再看一例!
main(){
char a='a',b='b';
int p,c,d;
p=a;
p=(p8)|b;
d=p0xff;
c=(p0xff00)8;
printf("a=%d\nb=%d\nc=%d\nd=%d\n",a,b,c,d);
}
c语言之中的位运算符是怎么运算的呢?
C语言提供了表12—1所列出的6种位运算符以及表12-2所列出的5种扩展运算符。
表12-1
运
算
符
含
义
优
先
级
~
按位求反
高
左移
低
右移
按位与
^
按位异或
|
按位或
表12-2
扩
展
运
算
符
表
达
式
等
价
的
表
达
式
=
a=2
a=a2
=
b=1
b=b1
=
a=b
a=ab
^=
a^=b
a=a^b
|=
a|=b
a=a|b
【说明】
位运算符中,只有“反求”(~)是单目运算符,即要求运算符两侧各有一个运算量,其余均为双目运算符。
运算的运算对象只能是整形或字符型数据,不能是其他类型的数据,在VC
6.0中整形数据占4个字节,字符型数据占1个字节。
参与运算时,操作数都必须首先转换成二进制形式,然后再执行相应的按位运算。
各双目运算符与赋值运算符结合可以组成扩展的赋值运算符,见表12-2.
12.2
位运算符详解
12.2.1
按位与运算
按位与运算“”的运算格式:
操作数1操作数2
【说明】
其中“操作数1”和操作数“2”必须是整型或字符型数据。
按位与运算规则是:当参加运算的2个二进制数的对应位都为1,则该位的结果为1,否则为0,即00=0,01=0,10=0,11=1。
【例如】
45的运算如下:
00000100
(4)
()
00000101
(5)
00000100
(4)
因此,45的值为4。
可以利用按位与运算来实现一些特定的功能,下面介绍几种常见的功能。
清零
如果想将一个数的全部二进制置为零,只要找一个二进制数,其中个个位要符合以下条件:原来的数中为1的位,新数中相应的位为0。然后使二者进行按位与运算即可达到清零的目的。
【例如】
原有数为171,其二进制形式为10101011,另找一个数,设它为00010100,它符合以上条件,即在原数为1的位置上,它的位值均为0。将两个数进行运算:
10101011
()
00010100
00000000
当然也可以不用00010100这个数而用其他数(如01000100)也可以,只要符合上述条件即可。任何一个数与“0”按位于之后的结果为0。
娶一个数中某些指定位
【例如】
有一个两字节的短整型数x,想要取其中的低字节,只要将x与八进制数(377)8按位于即可。如图12-1所示,经过运算“z=xy”后z只保留x的低字节,高字节为0.
x
00
10
11
00
10
10
11
00
y
00
00
00
00
11
11
11
11
z
00
00
00
00
10
10
11
00
图12-1
取x的低八位数
x
00
10
11
00
10
10
11
00
y
11
11
11
11
00
00
00
00
Z
00
10
11
00
00
00
00
00
图12-2
取x的高8位
如果想取两个字节中的高字节,如图12-2所示只需进行运算z
=
x
(177400)8。
保留一个数的某些位
要想将哪一位保留下来,就与一个数进行运算,此数在该位取1。
【例如】
有一数01110100,想把其中左面第1、3、5位保留下来,可以这样运算:
01110100
(十进制数116)
()
10101010
(十进制数170)
00100000
(十进制数32)
C语言位运算
不是按位与,是按位或
就是把二进制的每一位进行或运算也就是只要有一个是1,值就是1,都是0值才是0
int =1,b=2;则a|b的值为
00000000 00000000 00000000 00000001 |
00000000 00000000 00000000 00000010 =
00000000 00000000 00000000 00000011
按位与正好相反
是有一个0值就是0,只有都是1值才是1
按位异或是两都相同为0,不相同为1
按位取反就是0变成1,1变成0了
int型是多大与CPU有关,你的书可能比较老了,还是16位,现在的主流机器都是32位的,先进的都64位了
C语言中的位运算是怎样的
C语言是为描述系统而设计的,它的第一个应用就是UNIX操作系统的设计,因此必须具有低级语言的特点。指针运算和位运算就是其代表。
我们知道,计算机中的信息以及控制信号均是以二进制码的0、1的形式存储和处理的。每一个0或1称为一个“位”(bit),8位构成一个字节(byte)。在内存中,每一个字节均有一个编号,称为内存地址。
在以前的各章节中,我们都是将一个字节(如字符型)和若干字节(如整型、实型等)中的内容作为一个整体进行处理的(赋值、运算、I/O操作)。
位运算则是针对这些字节中的若干位进行操作。这在系统软件设计中和自动控制中是十分有用的。
C语言的位运算符有~,,
,
,
|,
^共6个,并可与赋值运算符相结合(除~外)成为位运算赋值操作。
应注意:参与位运算的量只能是整型和字符型。
c语言的位符号 都是怎么运算的啊
C语言提供的位运算符列表:
运算符
含义
描述
按位与
如果两个相应的二进制位都为1,则该位的结果值为1,否则为0
|
按位或
两个相应的二进制位中只要有一个为1,该位的结果值为1
^
按位异或
若参加运算的两个二进制位值相同则为0,否则为1
~
取反
~是一元运算符,用来对一个二进制数按位取反,即将0变1,将1变0
左移
用来将一个数的各二进制位全部左移N位,右补0
右移
将一个数的各二进制位右移N位,移到右端的低位被舍弃,对于无符号数,高位补0