关于位移溢出很奇怪的问题 ,谁能告诉我这是为什么?

海鸥软件 2020-09-15 05:14:23
今天在分析mp3文件结构时,标签大小值需要去除每个字节最高位,再重新组合成28位的值,就是标签大小,可在换算时左移14位老是提示溢出,而左移21位到没有溢出提示,好生奇怪,按说数值小溢出,那么数值大更溢出才对呀,可左移21位也没有超出四个字节最高值边界,这是为什么?

dim x as long

x=(&H34 And &H7F) * &H200000 没问题

x=(&H34 And &H7F) * &H4000 提示溢出

x=(&H34 And &H7F) * &H400 提示溢出

x=(&H34 And &H7F) * &H40 没问题

x=(&H34 And &H7F) * &H10000 没问题

x=(&H34 And &H7F) * &H20000 没问题

x=(&H34 And &H7F) * &H40000 没问题

没有再试,谁能告诉我,左移21位,及以上都没有问题,怎么左移10几位还溢出?
...全文
144 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
那是因为数字字面值默认是integer,超过integer范围才认为是long
你可以:
x=(&H34 And &H7F) *CLNG( &H4000)

海鸥软件 2020-11-12
  • 打赏
  • 举报
回复
引用
这是啥,VB?
&H34 And &H7F属于废操作,&H34 And &H7F = &H34

这是vb,既然&H34 And &H7F属于废操作,那么乘以后面值产生的效果也是一样的,为什么乘以大数没有提示溢出,而乘以小一点的数却溢出了呢?
  • 打赏
  • 举报
回复
这是啥,VB?
&H34 And &H7F属于废操作,&H34 And &H7F = &H34

3,424

社区成员

发帖
与我相关
我的任务
社区描述
其他开发语言 其他开发语言
社区管理员
  • 其他开发语言社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧