|
xiaobendan001 发表于 2025-4-26 18:33 我说的就是Keil C51,你不去试试怎么知道? |
|
在KEILC51里面,应该加类型转换,否则就不行。其他的我没试过,没有条件 |
xiaobendan001 发表于 2025-4-11 07:53 你自己试试1<<8好不好用,这个位移是编译器在编译期间计算出来的,哪来的什么八位? |
wpppmlah 发表于 2025-4-11 08:18 这个写法是在哪儿看到的? |
xiaobendan001 发表于 2025-4-11 07:53 感谢,按照你说的可以了 |
wpppmlah 发表于 2025-4-11 08:18 这样可以,感谢 |
| c编译器常量如果不加U、L等修饰符,默认是int类型的,而C51的int型是16位的,1<<16毫无疑问的就是0。 |
huashanhui20 发表于 2025-4-11 08:27 你这很明显不是C51的编译器 |
| 点运行了吗?或者设断点了吗 |
|
b = (1UL<<1); c = (1UL<<2); d = (1UL<<16); |
|
你有没有注意,定义的b是long,监视窗口里面的是char? 事实上每次重新编译之后,变量地址都不一定一样,所以稳妥之下,要删除重新加入。这个是KEIL的一个BUG吧。就是说监视里面的那个b,根本不是你定的那个b,所以等于啥也没有意义。 d为何为0,原因是你括弧里面的1,默认的是char的,左移16次,当然是0,实际上8次也是0。你改成这样 d = ((long)1<<16); 就是你想要的0x10000了。 |
| 放while(1)前面就可以了,不然一直再左移 |