关于keil编译51单片机(1<<16)运…
来源:互联网 发布:c语言 ip地址 合法性 编辑:程序博客网 时间:2024/06/15 20:33
#include<reg52.h>
//#define TL(x) ((1<<16) - x) %256;
//#define TH(x) ((1<<16) - x) /256;
#define uint unsigned int
int main( void )
{
a = (65536 - 250) / 256; //这里1
a= ((1<<16) - 250) /256; //还有这里2
return 0;
}
如上程序:
1输出结果正确
2输出结果为0
原因分析(不确定):
反汇编中1存入a中的值正确
2中存入a中的值为0
对于2,keil编译器默认常数1为16位(int),当执行1<<16时便溢出,实际上变成了0.(以前看过用这个方法测量机器是几位的),如果改为(long)1<<16,则执行结果正确。
编译器将65536看为long型,与1<<16有实质上的区别,所以在51上(8位单片机,int为16位)不能等同。只要左边的表达式能放下65536便不会溢出(uint不能,要用long或以上)。
实际上初始化定时器的值应该是65535,而不是65536
0 0
- 关于keil编译51单片机(1<<16)运…
- 刚写的C++关于重载+和<<运算…
- 关于<<IE报错403且其他在浏…
- Rational ClearCase LT应用指南(1)
- <!--[if IE]>….<![endif]--> (<!--[if !IE]>||<![endif]-->)
- <?php $sql = <<<E…
- 关于pthread_cancel <转>
- CentOS升级内核(elrepo-kernel-lt)--非编译方法
- 关于<jsp:include和<%@ include的区别
- 对数组A中的N(0<N<100)个…
- 小议 cout << i << " " << i++ << endl
- 关于keil 51单片机编程文图
- <uses-permission>和<per…
- HTML <a></a&…
- <!--注释-->和<%--注释--%>有什么…
- 字母大小写转换:a=a^1<<5;
- <<oracle管理之道》读书笔记1
- hibernate<1>-----入门
- 多线程编程3
- TCP网络编程
- ARM工具ADS
- ubuntu nfs
- 环境变量的设置
- 关于keil编译51单片机(1<<16)运…
- (转载) 关于nor flash,nand flash…
- linux samba服务器设置
- VMware网络配置详解
- linux tftp设置 + uboot下tftp下载…
- ACM学习进阶计划
- ComboBoxPropertyDescriptor 使用注意事项
- (转)LCD编程框架
- 复用时钟开启条件AFIO