首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >常数值计算中的溢出

常数值计算中的溢出
EN

Stack Overflow用户
提问于 2016-03-07 17:00:38
回答 1查看 244关注 0票数 0

以下代码:

代码语言:javascript
复制
private const uint FIRMWARE_DOWNLOAD_ADDRESS = 0x00001800;

public void someFunc(){
    byte[] command = new byte[16];


    command[11] = (byte)(FIRMWARE_DOWNLOAD_ADDRESS >> 24);
    command[10] = (byte)(FIRMWARE_DOWNLOAD_ADDRESS >> 16);
    command[9] = (byte)(FIRMWARE_DOWNLOAD_ADDRESS >> 8);
    command[8] = (byte)(FIRMWARE_DOWNLOAD_ADDRESS); //error: Overflow in constant value computation
}

引发错误Overflow in constant value computation

为什么?据我所知,0x00001800 <= 0xffffffff应该不会发生溢出。

另外三行为什么不抛出一个错误呢?我试着做:

代码语言:javascript
复制
command[8] = (byte)(FIRMWARE_DOWNLOAD_ADDRESS >>0);

认为正确的shift操作符正在以某种方式检查溢出条件,但这仍然会给出相同的错误。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-07 17:17:47

您将得到错误,因为您试图转换到byte的值不能用字节表示。

byte最大值0x000000FF (或255)。但是您正在尝试转换0x00001800 (或6144)。一个字节不能包含这个值。

其余的工作正常,因为在位移位之后,该值足够小,可以用一个字节表示。

代码语言:javascript
复制
FIRMWARE_DOWNLOAD_ADDRESS >> 24 = 0
FIRMWARE_DOWNLOAD_ADDRESS >> 16 = 0
FIRMWARE_DOWNLOAD_ADDRESS >> 8  = 24

似乎您在考虑一个无符号整数的最大值,即0xFFFFFFFF (或4294967295)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35849577

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档