代码之家  ›  专栏  ›  技术社区  ›  Midas

C++中CPU使用率降低:是否声明为无符号int?

  •  0
  • Midas  · 技术社区  · 15 年前

    什么需要最多的CPU:

    int foo = 3;
    

    unsigned int foo = 3;
    
    9 回复  |  直到 15 年前
        1
  •  3
  •   Vitalij    15 年前

    我的直接想法是:它不是将int转换成无符号int,所以速度没有差别。 here 是关于快速类型的链接。然而,应该优化的更多是算法和函数,而不是类型。

        2
  •  19
  •   Joe    15 年前

    它们都由内存中相同的位表示。这只是一个如何解释位的问题,这取决于您想要的值的范围。因此,两者都不是更密集的。

    wikipedia ,在x86中,有用于无符号乘法的操作码( mul )和有符号乘法( imul )这意味着它们可能需要相同的时间。

        3
  •  10
  •   Igor Zevaka    15 年前

    这是在MS VC 2005中生成的程序集:

    ; 9    :    int foo = 3;
    
        mov DWORD PTR _foo$[ebp], 3
    
    ; 10   :    unsigned int bar = 3;
    
        mov DWORD PTR _bar$[ebp], 3
    

        4
  •  5
  •   Drew Dormann    15 年前

    事实上,您几乎可以保证这些声明将编译成相同的代码。

    唯一的区别是编译器将记住变量是否为 signed unsigned ,并决定如何实现比较等操作,或决定调用哪些重载函数。

        5
  •  1
  •   John Knoeller    15 年前

    在本例中,根本没有成本差异。

        6
  •  1
  •   CodingLab    15 年前

    使用 unsigned int 快于 int

        7
  •  0
  •   Mike Dunlavey    15 年前

    没有区别。您可以通过查看生成的汇编语言来判断。即使存在差异,您也应该意识到这是微观优化,正确的思考时间是在所有宏优化完成之后,这是您的工作,而不是编译器的工作。

        8
  •  0
  •   Josh Lee ZZ Coder    15 年前

    宣布平原 int 在不指定有符号性的情况下,原则上应该让编译器知道,它可以根据大小和有符号性自由选择最自然的整数。但实际上,在现代桌面处理器上并没有速度差异(尽管可能在某些嵌入式系统上)。

        9
  •  0
  •   AnT stands with Russia    15 年前

    通常情况下,您不会注意到实践中的任何差异,因此在我看来,最佳实践是根据它应该表示的值的特定于应用程序的语义来选择类型:使用无符号类型来表示无符号量;签名的也一样。虽然有人反对这种哲学,喜欢使用 int unsigned int 只有在必要的时候。

    另外,我不知道你为什么在问题中提到“类型转换”,而下面的代码示例中没有类型转换。