相关疑难解决方法(0)

C - 确定数字是否为素数

我试图想出一个方法,它接受一个整数并返回一个布尔值来说明数字是否为素数,我不知道多少C; 有人会关心给我一些指示吗?

基本上,我会在C#中这样做:

static bool IsPrime(int number)
{
    for (int i = 2; i < number; i++)
    {
        if (number % i == 0 && i != number)
            return false;
    }
    return true;
}
Run Code Online (Sandbox Code Playgroud)

c c# primes

72
推荐指数
4
解决办法
18万
查看次数

无符号与有符号整数的性能

通过在有符号整数上使用无符号整数,是否有任何性能增益/损失?

如果是这样,这也是短期和长期的吗?

c c++ int unsigned integer

67
推荐指数
7
解决办法
3万
查看次数

为什么size_t和unsigned int比int慢?

我正在使用下面的简单交换排序算法在Windows中的Visual Studio项目中尝试不同的整数类型.处理器是英特尔.代码是在Release x64中编译的.优化设置为"最大化速度(/ O2)".与编译设置对应的命令行是

/permissive- /GS /GL /W3 /Gy /Zc:wchar_t /Zi /Gm- /O2 /sdl /Fd"x64\Release\vc141.pdb" /Zc:inline /fp:precise /D "NDEBUG" /D "_CONSOLE" /D "_UNICODE" /D "UNICODE" /errorReport:prompt /WX- /Zc:forScope /Gd /Oi /MD /Fa"x64\Release\" /EHsc /nologo /Fo"x64\Release\" /Fp"x64\Release\SpeedTestForIntegerTypes.pch" /diagnostics:classic 
Run Code Online (Sandbox Code Playgroud)

代码本身:

#include <ctime>
#include <vector>
#include <iostream>

void sort(int N, int A[], int WorkArray[]) // exchange sort
{
    int i, j, index, val_min;
    for (j = 0; j < N; j++)
    {
        val_min = 500000;
        for (i = j; i < N; i++) …
Run Code Online (Sandbox Code Playgroud)

c++ int performance size-t

5
推荐指数
2
解决办法
720
查看次数

C++中签名的Integer值溢出?

我有一个遗留的代码库,我们正试图从中迁移devtoolset-4devtoolset-7.我注意到有关有符号整数溢出的有趣行为(int64_t具体而言).

有一个代码片段,用于检测整数溢出,同时乘以一大组整数:

// a and b are int64_t
int64_t product = a * b; 
if (b != 0 && product / b != a) {
    // Overflow
}
Run Code Online (Sandbox Code Playgroud)

这段代码与devtoolset-4一起工作正常.但是,使用devtoolset-7时,永远不会检测到溢出.

例如:当a = 83802282034166b = 98765432, product变为-5819501405344925872(显然值已溢出).

product / b结果价值等于a (83802282034166).因此,if情况永远不会成真.它的值应该根据overflown(负)product值计算:-5819501405344925872 / 98765432 = -58922451788

具有讽刺意味的是,数学是正确的,但它导致devtoolset-4的异常行为.

  • 编译器是否可以缓存该值(而不是重新评估它)导致此行为?
  • 或者编译器优化是否将语句转换product / b != aproduct != a * b并达到相同的溢出值(或者可能只是根据上面的语句跳过计算 …

c++ integer-overflow devtoolset

4
推荐指数
2
解决办法
601
查看次数

比较有符号整数比无符号整数更快

可能的重复:
无符号与有符号整数的性能

我读的地方,它是一点点更快的x86_64比较signed intsC/C++相比unsigned ints,如for (int i...)是“快”比for (uint i...)

真的吗?为什么这是真的?我知道差异非常小,但无论如何。

c c++ performance gcc

1
推荐指数
1
解决办法
2269
查看次数

标签 统计

c++ ×4

c ×3

int ×2

performance ×2

c# ×1

devtoolset ×1

gcc ×1

integer ×1

integer-overflow ×1

primes ×1

size-t ×1

unsigned ×1