以下代码:
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
,所以不应发生溢出。
为什么其他3行不会抛出错误?我试着这样做:
command[8] = (byte)(FIRMWARE_DOWNLOAD_ADDRESS >>0);
认为右移位运算符以某种方式检查溢出条件,但这仍然会产生相同的错误。
答案 0 :(得分:1)
您收到错误,因为您尝试强制转换为byte
的值无法用字节表示。
byte
的{{3}}为0x000000FF
(或255)。但是你想要施放0x00001800
(或6144)。一个字节根本不能包含该值。
其余的工作正常,因为在位移后,该值足够小,可以用字节
表示FIRMWARE_DOWNLOAD_ADDRESS >> 24 = 0
FIRMWARE_DOWNLOAD_ADDRESS >> 16 = 0
FIRMWARE_DOWNLOAD_ADDRESS >> 8 = 24
好像你在考虑一个无符号整数max value,即0xFFFFFFFF
(或4294967295)