哪个(unsigned char)str vs str + 0xff或(unsigned int)值vs value + 0xffff是更快更好的方法?

时间:2012-05-15 14:36:41

标签: c++ c

我想知道以下哪种结构更受欢迎和更快。

unsigned char str1 = (unsigned char)str2 vs unsigned char str1 = str2 & 0xff

unsigned value1 = (unsigned)value2 vs unsigned value1 = value2 & 0xffffffff

问题:
  - 转换为:
  - 第一个比第二个更快(0xff还是0xffffffff)?   - 您更喜欢使用哪种?哪个更好用?   - (unsigned char)str可以更改为str & 0xff吗?

2 个答案:

答案 0 :(得分:4)

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

修改更新的问题:

假设CHAR_BIT == 8str之一是:无符号整数;带正值的有符号整数;带有2的补码表示的有符号整数;然后(unsigned char) str提供与str & 0xff相同的数字结果,但具有不同的类型。无论你编写哪一个,编译器都会选择一种快速计算结果的方法,在两种情况下都可能采用相同的方式。因此,您也可以编写unsigned char str1 = str2;,并在需要时将强制转换添加到(unsigned char),以抑制因丢失信息的隐式转换而产生的任何编译器警告。

在大多数实现中,unsigned是32位类型,在这种情况下,(unsigned)value2会为value2 & 0xffff生成大于65535的value2的不同值。将它放在一边(所以假设您使用的是16位实现),这与unsigned char的处理相同,只是提供的value2也有类型unsigned,那么结果具有相同的类型和相同的类型值。

答案 1 :(得分:0)

演员表的效果在很大程度上取决于strvalue的类型 例如。如果strunsigned char,则将其投放到unsigned char不会做任何事情,无论好坏。如果它是int它改变了事情,如果是指针 - 它完全是另一回事。

关于表现 - 这是你应该担心的最后一件事。差异,如果有的话,会很小。将重点放在最重要的地方。