如题,如下面的程序中:
- void main(void) {
- unsigned char ucI;
- unsigned long ulTemp = 0x80000000;
- Initial_System(); /** 系统初始化 */
- for(ucI = 0; ucI < 32; ucI ++) {
- if(ulTemp & (1 << ucI)) {
- HD44780_Display_Hex(0, 0, ucI / 10); /** 显示ucI的值,十位 */
- HD44780_Display_Hex(0, 1, ucI % 10); /** 显示ucI的值,个位 */
- }
- }
- while(1);
- }
复制代码
按照道理,应当1左移31次时和0x80000000相与,if里才为真才对,但是实际运行却是左移15次的时候为真。运行结果如下图:
3.png (5.3 KB, 下载次数: 0)
下载附件
2018-11-21 01:09 上传
请问我的程序逻辑有问题吗?还是到底是什么问题?
http://www.keil.com/support/man/docs/c51/c51_le_datatypes.htm
4.png (43.28 KB, 下载次数: 0)
下载附件
2018-11-21 01:17 上传
哦,谢谢!原来如此。
那么,在keil c51中,未指定类形的,默认是int了?
来自C语言规范呀,指明这个1是long型
为避免下次再掉坑,建议你用 1uL
一周热门 更多>