问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

c语言位运算是什么?

发布网友 发布时间:2022-04-19 22:43

我来回答

1个回答

热心网友 时间:2023-07-02 02:48

C语言提供的位运算:
运算符
含义
&
按位与
|
按位或

按位异或

取反
<<
左移
>>
右移
说明:
1。位运算符中除∽以外,均为二目(元)运算符,即要求两侧各有一个运算了量。
2、运算量只能是整形或字符型的数据,不能为实型数据。
“按位与”运算符(&)
规定如下:
0&0=0
0&1=0
1&0=0
1&1=1
例:3&5=?
先把3和5以补码表示,再进行按位与运算。
3的补码:
00000011
5的补码:
00000101
--------------------------------------------------------------------------------
&:
00000001
3&5=1
“按位或”运算符(|)
规定如下:
0|0=0
0&1=1
1&0=1
1&1=1
例:060|017=?
将八进制数60与八进制数17进行按位或运算。
060
00110000
017
00001111
--------------------------------------------------------------------------------
|:
00111111
060|017=077
“异或”运算符(∧),也称XOR运算符
规定如下:
0∧0=0
0∧1=1
1∧0=1
1∧1=0
例:57∧42=?
将十进制数57与十进制数42进行按位异或运算。
57
00111001
42
00101010
--------------------------------------------------------------------------------
∧:
00010011
57∧42=19
“取反”运算符(∽)
规定如下:
∽0=1
∽1=0
例:∽025=?
对八进制数25(即二进制0000000000010101)按位求反。
0000000000010101

1111111111101010
∽025=177752
左移运算符(<<)
 
将一个数的二进位全部左移若干位,若高位左移后溢出,则舍弃,不起作用。
例:a=a<<2
将a的二进制数左移2位,右补0。
若a=15,即二进制数00001111,则
a
00001111


a<<1
00011110


a<<2
00111100
最后a=60
右移运算符(>>)
 
将一个数的二进位全部右移若干位,低位移出部分舍弃。
例:a=a>>2
将a的二进制数右移2位,左补0。
若a=15,即二进制数00001111,则
a
00001111


a>>1
00000111


a>>2
00000011
最后a=3
位运算符与赋值运算符结合可以组成扩展的赋值运算符
如:&=,|=,>>=,<<=,∧=
例:a&=b相当于a=a&b
a<<=2相当于a=a<<2
不同长度的数据进行位运算
如果两个数据长度不同(例如long型和int型)进行位运算时(如a&b,而a为long型,b为int型),系统会将二者按右端对齐。如果b为正数,则左侧16位补满0。若b为负,左端应补满1。如果b为无符号整数型,则左端添满0。
位运算举例
例:取一个整数a从右端开始的4∽7位
考虑如下:1、先是a右移4位,即a>>4
2、设置一个低4位全为0的数,即∽(∽0<<4)
3、将上面两式进行与运算,即a>>4&∽(∽0<<4)
程序如下:
main()
{unsigned
a,b,c,d;
scanf("%o",&a);
b=a>>4;
c=∽(∽0<<4);
d=b&c;
printf("%o\n%o\n",a,b);
}
结果:331↙
331(a的值,八进制)
15
(d的值,八进制)
例:循环移位。要求将a进行右循环移位。即a右循环移n位,将a中原来左面(16-n)位右移n位。现假设两个字节存放一个整数。如右图。
考虑如下:1、先将a右端n位放到b中的高n位中,即:b=a<<(16-n)
2、将a右移n位,其左面高位n位补0,即c=a>>n
3、将c与b进行按位或运算,即c=c|b
程序如下:
main()
{unsigned
a,b,c;int
n:
scanf("a=%o,n=%d",&a,&n);
b=a<<(16-n);
c=a>>n;
c=c|b;
printf("%o\n%o",a,c);
}
结果:a=157653,n=3↙
331(a的值,八进制)
15
(d的值,八进制)
位段
所谓位段是以位为单位定义长度的结构体类型中的成员。
例:struct
packed-data
{unsigned
a:2;
unsigned
b:6;
unsigned
c:4;
unsigned
d:4;
int
i;
}data;
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
iqoo为什么不值得入手? iQOO12有必要入手吗? ipad微信为什么可以看视频却没有声音 为什么ipad的微信视频通话没有声音? ipad上的微信为什么没有声音提醒? 奥运会2024结束时间是几号 ...能把电脑上一些常用图标归类的软件 在桌面只留一个图标 打开后里面... x3和5系是一个档次吗 奥运会2024年几号结束 奇怪了,我电脑上的桌面怎么有部分在屏幕外..大家帮忙 c语言的位符号 都是怎么运算的啊 C语言中“按位运算符”是什么意思? c语言之中的位运算符是怎么运算的呢? c语言的按位运算符怎么操作!? C语言位运算 在Nike官网买了双鞋,还没寄到,不小心退货怎么取消 Nikeapp过了三十分钟怎么退款? nike官网取消订单退款多久到账 nike app怎么取消订购 Nike官网未发货的订单可以退款或者取消订单吗 nike取消订单后,钱什么时候会返还 nike官网取消订单什么时候退款 如何在nike的app中取消订单 nike官网取消的订单怎么退款 nike取消订单退款多久到账 干货来了,年底做网络推广有什么优势 nike专属购买以后可以取消订单吗 nike官网取消订单退款要多久 snkrs上中签后超时取消了,应该怎么办? nikeapp怎么取消订单 C语言位操作运算符 &,|,~,^,&lt;&lt;,&gt;&gt;是干什么的? c语言位运算问题? 位运算符的C语言的六种位运算符 c语言中的位运算符中‘按位取反’是怎么运算的 C语言的逻辑运算和按位运算怎么区分? C语言中按位或,与,非是怎么用的,怎么运算? c 位运算符 C语言中的位运算在编程中有什么意义啊! C语言中按位与(&)运算符是什么意思 关于c语言中的按位运算符! C语言中的按位运算符和逻辑运算符? C语言中按位与(&)运算符是什么意思? 刚装了电脑Win7字迹太小怎么放大 如何调整win7系统字体大小 请问笔记本win7字体太小怎么调整 Win7怎样调整字体大小 win7的怎么调小字体 win7下字体怎么放大? 蜂蜜应该在多少温度下保存 蜂蜜有保质期,你们是如何保存蜂蜜的呢?