根据这个答案,我尝试打印一个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) 对于在32位和64位程序(在Visual C++中)都能工作的64位整数,我能够进行乘法除法运算的最准确方法是什么?(如果溢出,我需要结果mod 2 64.)
(我正在寻找类似MulDiv64的东西,除了这个使用内联汇编,它只适用于32位程序.)
显然,可以投射到double后面,但是我想知道是否有更准确的方法并不太复杂.(即我不是在寻找任意精度的算术库!)
可能重复:
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++ 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) 在Java中,您可以这样做:
long now = (new Date()).getTime();
Run Code Online (Sandbox Code Playgroud)
我怎么能用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)
这是为什么?
我正在努力解决欧拉项目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) #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的容量,它可以保持这个值.
文字表达式也有类型吗?
long long int a = 2147483647+1 ;
long long int b = 2147483648+1 ;
std::cout << a << ',' << b ; // -2147483648,2147483649
Run Code Online (Sandbox Code Playgroud) 我正在使用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)
我需要帮助处理大数字.