|
发表于 2024-4-18 23:39:17
|
显示全部楼层
本帖最后由 t3486784401 于 2024-4-18 23:40 编辑
找了手头几个编译器、运行平台跑了下。 啥都别说了,这代码质量堪忧。
ICCAVR +m328 (ICC, 8bit AVR):
Arduino +m328 (GCC, 8bit-AVR):
VS2005 +Win32 (VS, Win32):
Arduino +Esp8266 (GCC, 32bit-XTENSA):
总结下来就是,8bit 平台会忽略 signed short int,移位时直接按无符号硬怼;
32bit 平台会把 signed short int 升格为 signed int32,然后就是更大的整数了。
一般很少用 signed 移位,就是避免这种坑;
在 AVR 的指令里右移有三种 ASR ROR LSR,左移只有两种 ROL LSL.
缺少的那个 ASL(算数左移)就是一楼位置的代码功能,显然是个指令制定者都不愿意面对的问题。
实际在 C 里升格降格都理不清的话,更别说底层指令了。
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|