0

我想知道以下哪些构造是首选和更快的。

unsigned char str1 = (unsigned char)str2对比unsigned char str1 = str2 & 0xff

unsigned value1 = (unsigned)value2对比unsigned value1 = value2 & 0xffffffff

问题:
- 通过转换为:
- 第一比第二(0xff0xffffffff)快吗?
- 你更喜欢用哪个?哪个更好用?
- 可以(unsigned char)str更改为str & 0xff

4

2 回答 2

4

这四个代码片段中没有两个做同样的事情。它们之间的任何速度差异都是无关紧要的(因为运行得更快但做错事情的代码毫无价值)并且可以忽略不计(它们都非常快)。

编辑更新的问题:

假设 ,CHAR_BIT == 8str以下之一: 无符号整数;具有正值的有符号整数;具有 2 的补码表示的有符号整数;然后(unsigned char) str给出与 相同的数值结果str & 0xff,但类型不同。无论您编写哪一个,编译器都会选择一种快速的方法来计算该结果,这两种情况下的方法很可能相同。因此,您最好只编写unsigned char str1 = str2;,并在(unsigned char)需要时添加强制转换,以抑制您为丢失信息的隐式转换而获得的任何编译器警告。

在大多数实现中,unsigned是 32 位类型,在这种情况下,会产生与大于 65535(unsigned)value2不同value2 & 0xffff的值。撇开这一点不谈(假设您使用的是 16 位实现),它与那么结果具有相同的类型和相同的值。value2unsigned charvalue2unsigned

于 2012-05-15T14:39:07.563 回答
0

演员表的效果很大程度上取决于 和 的str类型value
例如,如果strunsigned char,将其强制转换为unsigned char无济于事,无论好坏。如果它int改变了事情,如果是一个指针 - 这完全是另一回事。

关于性能 - 这是你最不应该担心的事情。差异,如果有的话,将是微小的。将优化工作花在重要的地方。

于 2012-05-15T15:06:59.423 回答