请问在Keil C51的for循环参数里左移最大只能15位吗?

2020-01-13 18:24发布

如题,如下面的程序中:

  1. void main(void) {
  2.         unsigned char ucI;

  3.         unsigned long ulTemp = 0x80000000;

  4.         Initial_System();        /** 系统初始化 */

  5.         for(ucI = 0; ucI < 32; ucI ++) {
  6.                 if(ulTemp & (1 << ucI)) {
  7.                         HD44780_Display_Hex(0, 0, ucI / 10);        /** 显示ucI的值,十位 */
  8.                         HD44780_Display_Hex(0, 1, ucI % 10);        /** 显示ucI的值,个位 */
  9.                 }
  10.         }

  11.         while(1);
  12. }
复制代码

按照道理,应当1左移31次时和0x80000000相与,if里才为真才对,但是实际运行却是左移15次的时候为真。运行结果如下图:

3.png (5.3 KB, 下载次数: 0) 下载附件 2018-11-21 01:09 上传

请问我的程序逻辑有问题吗?还是到底是什么问题?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。