It's difficult to tell what is being asked here. This question is ambiguous, vague, incomplete, overly broad, or rhetorical and cannot be reasonably answered in its current form. For help clarifying this question so that it can be reopened, visit the help center。
7年前关闭。
我想知道以下哪种构造是首选的,而且速度更快。
或
问题:
-通过从转换为:
-第一比第二快吗(
-你喜欢用哪一种?哪个更好用?
-是否可以将
7年前关闭。
我想知道以下哪种构造是首选的,而且速度更快。
unsigned char str1 = (unsigned char)str2
与unsigned char str1 = str2 & 0xff
或
unsigned value1 = (unsigned)value2
与unsigned value1 = value2 & 0xffffffff
问题:
-通过从转换为:
-第一比第二快吗(
0xff
或0xffffffff
)?-你喜欢用哪一种?哪个更好用?
-是否可以将
(unsigned char)str
更改为str & 0xff
? 最佳答案
这四个代码片段中没有两个做相同的事情。它们之间的任何速度差异都是无关紧要的(因为运行速度更快但做错事的代码是毫无价值的),而且可以忽略不计(它们都非常快)。
为更新的问题编辑:
假设CHAR_BIT == 8
,并且str
是以下类型之一:无符号整数;带正值的有符号整数;带2补码表示的有符号整数;那么(unsigned char) str
给出的数值结果与str & 0xff
相同,但类型不同。无论你写哪一个,编译器都会选择一种快速的方法来计算结果,在这两种情况下很可能是相同的。因此,您也可以只编写unsigned char str1 = str2;
,并在需要时将强制转换添加到(unsigned char)
,以禁止任何编译器警告您进行丢失信息的隐式转换。
在大多数实现中,unsigned
是一种32位类型,在这种情况下,(unsigned)value2
会为大于65535的value2 & 0xffff
产生不同的值。撇开这个不谈(假设你是16位的实现),这和value2
是一样的,除非unsigned char
也有value2
类型,那么结果有相同的类型和相同的值。
关于c++ - (unsigned char)str vs str + 0xff或(unsigned int)value vs value + 0xffff中的哪一种是更快捷的首选方法? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10603077/