字节+字节=int…为什么?看看这个C#代码:byte x = 1;byte y = 2;byte z = x + y; // ERROR: Cannot implicitly convert type 'int' to 'byte'的数学结果byte(或short)类型隐式转换为整数。解决方案是显式地将结果转换回一个字节:byte z = (byte)(x + y); // this works我想知道的是为什么?是建筑吗?哲学?我们有:int + int = intlong + long = longfloat + float = floatdouble + double = double所以为什么不:byte + byte = byteshort + short = short?一些背景:我正在对“小数字”(即<8)执行一长串计算,并将中间结果存储在一个大数组中。使用字节数组(而不是int数组)更快(因为缓存命中)。但是广泛的字节转换在代码中传播,使得它更加不可读。
3 回答
繁华开满天机
TA贡献1816条经验 获得超4个赞
byte z = x + y;
byte z = (int) x + (int) y;
HUX布斯
TA贡献1876条经验 获得超6个赞
就“为什么会发生”而言,这是因为C#为算术定义的任何运算符都没有字节、短或ushort,就像其他人所说的那样。这个答案是关于为什么那些操作符没有定义。
我相信这基本上是为了表演。处理器可以快速完成32位的本地运算。自动将结果转换为字节。能如果你真的不想那样做的话,就会导致性能上的损失。
开心每一天1111
TA贡献1836条经验 获得超13个赞
I 思想我以前在某个地方见过这个。
假设我们生活在一个幻想的世界里,对“字节”的操作导致了“字节”。
byte b = 32;byte c = 240;int i = b + c; // what is i?
在这个幻想的世界里,我的价值将是16岁!为什么?因为+操作符的两个操作数都是字节,所以“b+c”的和被计算为一个字节,这导致整数溢出导致16。(正如我前面提到的,整数溢出是新的安全攻击向量。)
编辑雷蒙德实际上是在捍卫C和C+最初采用的方法。在评论中,他为C#采取同样的方法辩护,理由是语言向后兼容。
- 3 回答
- 0 关注
- 790 浏览
添加回答
举报
0/150
提交
取消