C语⾔位运算符详解
⽬录
位运算符
简介
C语⾔既具有⾼级语⾔的特点,⼜具有低级语⾔的特性,如⽀持位运算就是其具体体现。这是因为,C语⾔最初是为取代汇编语⾔设计系统软件⽽设计的,因此C语⾔必须⽀持位运算等汇编操作。位运算就是对字节或字内的⼆进制数位进⾏测试、抽取、设置或移位等操作。其操作对象不能是float、double、long double等其他数据类型,只能是char和int类型。
C语⾔提供如下表格的六种位运算符,其中,只有按位取反运算符为单⽬运算符,其他运算符都是双⽬运算符。
总概
位运算符
运算符含义类型优先级结合性
~按位取反单⽬运算符⾼从右向左
<<,>>按位左移、按位右移双⽬运算符↓从左向右
&按位与双⽬运算符↓从左向右
^按位异或双⽬运算符↓从左向右
I按位或双⽬运算符低从左向右
补充:
单⽬运算符:只对⼀个操作数进⾏逻辑运算,例如:~a
双⽬运算符:只对两个操作数进⾏逻辑运算,例如:a & b
三⽬运算符:只对三个操作数进⾏逻辑运算且只有⼀个,例如:a ?b : c
其中a可以是表达式也可以是⼀个值,⽤于判断真假,若a为真,则结果为b;若a为假,则结果为c。
主要区别:操作数(常量或者变量)数量的不同。
位运算符的运算规则
a b    a & b    a I b    a ^ b~ a
000001
010111
100110
111100
下⾯我会对这些运算符的使⽤进⾏逐⼀解释说明:
1、按位与(&)
按位与可⽤于对字节中的某位清零,即两个操作数中的任意⼀位为0时,运算结果的对应位就会被置0。也可以简单记为(11为1,否则为0),例题如下,只保留15的最低位不变,在其余位均置为0,可⽤15 & 1来实现,即:
00001111(15)
&    00000001 (1)
负75的补码怎么求_____________________
00000001 (1)
2、按位与(I)
与按位与相反,按位或可⽤于对字节中的某位置1,即两个操作数中的任意⼀位为1时,运算结果的对应位就会被置为1。也可以简单记为
3、按位异或(^)
如果两个操作数的某对应位不⼀样,则按位异或结果的对应位为1,简单记为(相同为0,不同为1)。例如,3 ^ 5的运算过程可表⽰为:
3、按位取反(~)
5、按位左移(<<)
假设⼀个常量x,左移n位,则按位左移表⽰把x的每⼀位向左平移n位,右边空位补0。例如,15及其左
移⼀位、⼆位、三位的⼆进制代码
6、按位右移(>>)
假设⼀个常量x,右移n位,x >> n则表⽰把x的每⼀位向右平移n位。当x为有符号数时,左边空位补符号位上的值(即负数补1),这种⼀位移位称为算术移位;当x为⽆符号数时,左边空位补0(即正数补0),这种移位称为逻辑移位。下⾯我们举两个例⼦:
1、15按位右移⼀位,⼆位,三位的结果如下:
再如,-15按位右移⼀位,⼆位,三位的结果如下:
初始字节内容    11110001    对应⼗进制值为-15
左移⼀位后的字节内容    11111000    对应⼗进制值为-8
左移⼆位后的字节内容    11111100    对应⼗进制值为-4
左移三位后的字节内容    11111110    对应⼗进制值为-2
**总结:**在实际运⽤中,通常⽤左移位和右移位来代替整数的乘法和除法,以便于将软件算法⽤硬件
实现。其中,每左移⼀位相当于乘以2,左移n位相当于乘以2的n次⽅。每右移⼀位相当于除以2,右移n位相当于除以2的n次⽅。这种运算在某些场合下是⾮常有⽤的。例如,在实现某些含有乘除法的算法时,可以通过移位运算实现乘2或除2运算,这样⾮常有利于算法的硬件实现。
以上就为⼤家总结了C语⾔位运算符的计算⽅法,虽然容易混淆,但是下去多练,多操作就会很快记住啦!如果⼤家在读完这篇博客后有所帮助,请给我点个赞关注⼀下吧!谢谢⼤家了。如果有什么问题,可以在下⽅评论,或者加我QQ:1423759736,我会及时回复的!