在keil c51中数不能直接以二进制形式赋值,虽然在8051的汇编中是可以的。二进制数虽然书写长,易出错,但是由于是一位位写的,所以程序设计者能够很明确的看到每一位的状态,看得比较直观。于是很多人怀念了8051的汇编,很想在c51中使用二进制。没猜错的话搜到本篇日志的人很可能就是来找这种解决办法的,下面两种办法都是不错的选择。
方法一:
建立一个头文件,将所有的二进制数宏定义列举出来,用的时候直接使用宏定义,头文件定义:binary(右键>>“目标另存为”>>下载)。
方法二:
做一个带参数宏定义,将输入的类二进制数变换为对应的16进制数,整个定义和使用实例请见下文,可以直接使用,如果想研究原理又看不懂带参宏定义的朋友们请参考谭浩强的《c程序设计》预处理命令一章内容(第三版在p204-p211)。
#define longtobin(n) \
(\
((n >> 21) & 0x80) | \
((n >> 18) & 0x40) | \
((n >> 15) & 0x20) | \
((n >> 12) & 0x10) | \
((n >> 9) & 0x08) | \
((n >> 6) & 0x04) | \
((n >> 3) & 0x02) | \
((n ) & 0x01) \
)
#define bin(n) longtobin(0x##n##l)
void main(void)
{
unisigned char c;
c = bin(10101001); //相当于c = 0xa9
}
上面预处理指令中使用了反斜杠\,这里解释一下:每一条预处理语句总是以#字符开始,并且不能超过一行,一旦遇到换行符语句就被当做结束,唯一的一种能将预处理语句扩展到多行的办法就是在换行符之前加一个反斜杠('\')。
半导体技术新进展,石墨烯量子点技术再上层楼
麒麟980与骁龙845跑分对比 短板已被补足
卷积神经网络计算:精确识别纳米级有序结构
食用油快速检测仪器检测油品质量安全
小型回流焊机开关机操作流程
Keil C51中直接使用二进制数方法
蓝牙模块有什么作用 蓝牙芯片的作用 蓝牙芯片有什么作用 具体有哪些应用场景
了解伺服电机和变频电机的区别
新松助力长飞完成光纤行业首个智能制造工厂
特斯拉推出一款V3增压充电器 15分钟就能充满电
物联网企业:物联网监控工程系统正在为改进过程开辟新的领域
福田打造人工智能应用示范区
NFC与二维码的优劣与应用分析
华为高管:手机创新
5G的到来能让VR行业开始盈利吗
掌上电脑功能特点有哪些?
CES Asia上曝光的两款京东送货无人机
如何提高RS-485电快速脉冲群的抗干扰能力
15个科技预言竟然都实现了
大数据技术及应用介绍2