c语言0x05异或0x1,嵌入式C语言教程(10)-- 位操作

本文介绍了C语言中位操作的基本概念,包括位或(|)、位与(&)、位取反(~)和位异或(^)的操作。详细解释了这些操作符的使用,并通过实例展示了它们在实际编程中的应用,如清位、置位和取位操作。此外,文章还讨论了移位操作,区分了无符号数的逻辑移位和有符号数的算术移位,以及它们在不同编译器下的行为差异。
摘要由CSDN通过智能技术生成

Andrew Huang

位操作是一个嵌入式C开发者需要掌握基本功之一.在寄存器,标志位操作等都需要大量位操作.

1.逻辑位操作

数C语言有几个标准的位操作符.(注意跟逻辑连接符 && || !区分开来)

| 位或

& 位与

~ 位取反

^ 位异或.

这几个操作符也能与=结果成复合操作符 |=,&=,~=,^=.

1.1 ~取反操作

单目操作符.后面接一个整数类型.

格式: ~

给任何一个类型,按位取反.因此一个负数取反必须是一个正数.

简单判断一个数是否带符号位办法

#define IS_SIGNED(n) ( (((n)>=0) && (~(n)<0)) || (((n)<0) && (~(n)>0)) )

这个宏就是利用补码取反符号位也改变特性

简单判断一个类型是否带符号位的办法

#defineISUNSIGNED(type)(~((type)1)>0)

思考:能对浮点数double进行取反吗?后果是什么?

产生编译错误,无法对应作取反操作

1.2 |位或

双目操作符,格式: 数字 | 数字

两个数字按位操作,每一个对应位只要出现1,结果必然是1,只有对应位上全0,结果为0,即满足如下运算

1 | 0  = 1 ; 0 | 1 = 1 ; 1 | 1 = 1 ; 0 | 0 = 0

#define PRINT_INT(e) printf("%s=%d\n",#e, e)

PRINT_INT(7 | 3 );

PRINT_IN

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值