我想知道以下哪种结构更受欢迎和更快。
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
吗?
答案 0 :(得分:4)
这四个代码片段中没有两个做同样的事情。它们之间的任何速度差异都是无关紧要的(因为代码运行得更快,但错误的东西是毫无价值的)并且可以忽略不计(它们都非常快)。
修改更新的问题:
假设CHAR_BIT == 8
和str
之一是:无符号整数;带正值的有符号整数;带有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)
演员表的效果在很大程度上取决于str
和value
的类型
例如。如果str
为unsigned char
,则将其投放到unsigned char
不会做任何事情,无论好坏。如果它是int
它改变了事情,如果是指针 - 它完全是另一回事。
关于表现 - 这是你应该担心的最后一件事。差异,如果有的话,会很小。将重点放在最重要的地方。