相关疑难解决方法(0)

为什么PRIu64不能在此代码中工作?

根据这个答案,我尝试打印一个uint64_t,但它给了我一个错误:

错误:在'PRIu64'之前预期``)'

以下是显示我想要做的最小代码:

#define __STDC_FORMAT_MACROS
#include <inttypes.h>
#include <cstdio>

class X {
  X() {
    uint64_t foo = 0;
    printf("%07" PRIu64 ": ", foo);
  }
};

int main() {}
Run Code Online (Sandbox Code Playgroud)

这个最小的代码编译,但我的实际代码没有.但是,我尝试X::X()在我的实际代码中使用完全相同的2行,这不起作用.

我应该寻找什么来进一步调试?我的实际代码也是#include其他标题.这会导致问题吗?包含标题的顺序是否重要?

编辑 PRIu64在我的机器上定义如下:

# if __WORDSIZE == 64
#  define __PRI64_PREFIX    "l"
#  define __PRIPTR_PREFIX   "l"
# else
#  define __PRI64_PREFIX    "ll"
#  define __PRIPTR_PREFIX
# endif

# define PRIu64     __PRI64_PREFIX "u"
Run Code Online (Sandbox Code Playgroud)

c++ printf c++03

23
推荐指数
3
解决办法
2万
查看次数

最准确的方法是在64位中进行组合乘法除法运算?

对于在32位和64位程序(在Visual C++中)都能工作的64位整数,我能够进行乘法除法运算的最准确方法是什么?(如果溢出,我需要结果mod 2 64.)

(我正在寻找类似MulDiv64的东西,除了这个使用内联汇编,它只适用于32位程序.)

显然,可以投射到double后面,但是我想知道是否有更准确的方法并不太复杂.(即我不是在寻找任意精度的算术库!)

c c++ math visual-c++

22
推荐指数
2
解决办法
4542
查看次数

对于"long"类型,整数常量太大

可能重复:
C/C++中的long long

为项目Euler问题编写一个简单的程序.拒绝编译,因为"整数常量对于"long"类型"来说太大,即使它应该在unsigned long long的大小限制内.使用dev-c ++编译器.

有问题的代码:

#include <iostream>

bool isprime (unsigned long long i)
{
    if(i==1||i==0) return false;
    if(i==2) return true;
    for(unsigned long long k=2;k!=i-1;k++)
    {      
        if(i%k==0) return false;
    }
    return true;
}

int main()
{
    for(unsigned long long i=600851475143;i>=0;i--) //problematic line
    {
        if(isprime(i))
        {
            std::cout<<i;
            std::cin.get();
            return 0;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

c++ dev-c++

18
推荐指数
1
解决办法
3万
查看次数

如何动态分配大内存,如10 G,在64-linux上使用c ++中的new运算符?

我需要使用C++ new运算符(如10G)为特殊应用程序动态分配更大的float数组.代码在64-ubuntu-14.04 Linux OS上运行,带有64G内存.当我将内存请求设置为大约7G时,1879048192x4/(1024x1024x1024)=7G(float有4个字节),如下所示:

float * data; 
data = new float[1879048192];
Run Code Online (Sandbox Code Playgroud)

该程序运行良好,但当我尝试将请求增加到10G时,我得到了一个 what(): std::bad_alloc.我也尝试用来malloc()代替新的运算符:

data =(float*)malloc(1879048192*sizeof(float));
Run Code Online (Sandbox Code Playgroud)

但获得相同的结果.我的ulimit -a是这样的:

core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 514689
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority …
Run Code Online (Sandbox Code Playgroud)

c++ linux memory

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

如何像java一样在c ++中获得毫秒的时间

在Java中,您可以这样做:

long now = (new Date()).getTime();
Run Code Online (Sandbox Code Playgroud)

我怎么能用c ++做同样的事情?

c++ time

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

C 和数字后缀

我有一个关于在 C 中使用数字后缀的问题。

例子:

long long c;
Run Code Online (Sandbox Code Playgroud)

变量 c 是 long long 类型。为了启动它的价值,我做(通常)

c = 12;
Run Code Online (Sandbox Code Playgroud)

这样做时,编译器会将 c 识别为 long long 类型。

那么,如果我这样做

printf("%d",sizeof(c));
Run Code Online (Sandbox Code Playgroud)

结果是 8 - 当然是 64 位。所以编译器记住 c 是 long long 类型。

但是我已经看到了一些例子,我需要通过执行来强制类型为 long long

c = 12LL
Run Code Online (Sandbox Code Playgroud)

这是为什么?

c

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

当找到最大素数因子时,"整数常数对于'long'类型来说太大了"

我正在努力解决欧拉项目3:

Description: The prime factors of 13195 are 5, 7, 13 and 29.
             What is the largest prime factor of the number 600851475143 ?
Run Code Online (Sandbox Code Playgroud)

这是我生成答案的代码.但是我需要一个整数类型来保存600851475143.当我在Mac上的GCC上编译它时,我得到:

integer constant is too large for ‘long’ type". 
Run Code Online (Sandbox Code Playgroud)

我希望很久很久就可以很容易地掌握这个数字 我也试过让它没有签名.为什么我的代码不能容纳那么少的数字,我该怎么做才能使它工作?

#include <iostream>
#include <vector>

using namespace std;

static bool IsPrimeFactor(int numToTest,int testNum,vector<int> factors)
{
    if(numToTest%testNum==0) // is it a factor?
    {
        // see if it is a prime factor
        for(unsigned int i=0; i < factors.size(); i++)
        {
            if(testNum%factors[i]==0)  // see if this factor …
Run Code Online (Sandbox Code Playgroud)

c++ prime-factoring

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

为什么c ++中的long long不能容纳2500 ^ 3

#include <iostream>
using namespace std;

int main() {

    long long a=2501*2501*2501;
    cout<<a;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我也尝试了unsigned long long,并一直给出一些胡言乱语的答案.我检查了long long的容量,它可以保持这个值.

c++ long-integer

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

C++文字整数类型

文字表达式也有类型吗?

long long int a = 2147483647+1 ;
long long int b = 2147483648+1 ; 
std::cout << a << ',' << b ; // -2147483648,2147483649
Run Code Online (Sandbox Code Playgroud)

c++ int integer-overflow long-integer

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

处理C++中的大数字

我正在使用Dev C++

不稳定的线是......

long long n=600851475143;
Run Code Online (Sandbox Code Playgroud)

错误描述:

integer constant is too long for "long" type
Run Code Online (Sandbox Code Playgroud)

我需要帮助处理大数字.

c++

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