位运算
1.位运算符
1.1按位与 &
有0出0,全1出1
作用:
(1)清零. 与0按位与
(2)取一个数的某些位
eg:三的倍数清0

1.2按位或 |
有1出1,全0出0
作用:
(1)置1与1按位或
(2)使某些位置1,其余位保持原样
eg:三的倍数置1

1.3按位异或 ^
相同出0,相异出1
作用:
(1)与1相异,状态翻转
(2)与0相异,状态不变
(3)交换两个值,不用中间变量
eg:三的倍数反转

1.4取反 ~
是单目运算符,对一个二进制数按位取反。
在位运算符中优先级最高。
eg:对t取反

1.5左移 <<
运算符将一个数的二进制位全部左移若干位。
高位左移后溢出不用,低位补0。
左移一位相当于乘2,*2"相当于左移n位。
eg:对三的倍数置1

1.6右移 >>
运算符将一个数的二进制位全部右移若干位。
低位右移后舍弃。
高位:
(1)对无符号数,高位补
(2)02)对有符号数,正数补0,负数补1。
位运算符和赋值符可以组成复合运算符。
eg:右移三次循环打印

注意:
位运算符和赋值符可以组成复合运算符。
a &= b ↔ a = a&b
a |= b ↔ a = a|b
a <<= 1↔ a = a<<1
a >>= 1 ↔ a = a>>1
不同长度的数据进行计算:
以长的数为准,右端对齐,无符号数,左端补0;
有符号数,左端补1
说明:
(1)位运算符中除~以外,均为二目(元)运算符,即要求两侧各有一个运算量。
(2)运算量只能是整型或字符型的数据,不能为实型数据。
2.位段
为了节省内存,可以在一个字节放几个信息,如逻辑变量等,取变量的一位或几位为一个单位,来表示独立的信息,这种表示方式称为位段。
注意:
(1)位段允许的最大值的范围,若超过最大值,自动取其低位。
data.a=4
data.a=0
(2)可以有无名位段,不能引用。若无名位段长度为零则表示下一个位段从新的字节开始存放。
unsigned a:2;
unsigned :0;
unsigned c:4;
unsigned d:4;
(3)不能定义位段结构的数组,不能对位段求地址,不能用指针指向位段。也不能输入位段的值。
(4)位段可以输出。 %d %u %o %x
(5)位段可以参与运算,系统将其转换成整型。
data.a + 5 / data.b
(6)位段不能跨2个单元。
今天算是基本上把c语言上完了,不知不觉学了快二十天了,时间过得真快,但是这二十天也是收获满满,从懵懂到掌握,这个过程真是爱恨交加,因为不懂反复听学,而怀疑自己是否真的适合学这个,是否能坚持下来,到现在不断掌握知识点,能自己编写一些比较简单的多功能的代码,是非常开心的,虽然每天都学的很晚,每天都很累,但是一想到自己又掌握了新的知识点,就觉得这些是值得的。调整状态迎接下一章!

9782

被折叠的 条评论
为什么被折叠?



