嵌入式学习———c语言完结篇

位运算

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语言上完了,不知不觉学了快二十天了,时间过得真快,但是这二十天也是收获满满,从懵懂到掌握,这个过程真是爱恨交加,因为不懂反复听学,而怀疑自己是否真的适合学这个,是否能坚持下来,到现在不断掌握知识点,能自己编写一些比较简单的多功能的代码,是非常开心的,虽然每天都学的很晚,每天都很累,但是一想到自己又掌握了新的知识点,就觉得这些是值得的。调整状态迎接下一章!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值