我试图在Java中声明一个很长的值,但不幸的是它不工作。 这是我的代码。 它会导致以下错误消息:“inttypes的文字4294967296超出范围”。 long bytes = 4294967296; 我需要这个值来创build一个文件筛选器,筛选出大于4294967296字节(4GB)的文件。 另一种方式没有任何问题( long size = file.length() )与每个文件的大小,这就是为什么我不明白为什么我的声明不工作。
我正在做一个aproximate程序,我试图用很长的时间,但它不工作。 这是代码 #include<stdio.h> #include<math.h> typedef long long num; main(){ num pi; pi=0; num e, n; scanf("%d", &n); for(e=0; 1;e++){ pi += ((pow((-1.0),e))/(2.0*e+1.0)); if(e%n==0) printf("%15lld -> %1.16lld\n",e, 4*pi); //printf("%lld\n",4*pi); } }
通过阅读C ++标准,我一直认识到C ++中积分基本types的大小如下: sizeof(char) <= sizeof(short int) <= sizeof(int) <= sizeof(long int) 我从3.9.1 / 2推导出来的: 有四个有符号整数types:“signed char”,“short int”,“int”和“long int”。在这个列表中,每个types至less提供与列表中的前一个types相同的存储。 Plain int具有执行环境的体系结构所build议的自然大小 此外, char的大小被3.9.1 /描述为: 足够大以存储实现的基本字符集的任何成员。 1.7 / 1从更具体的angular度对此进行了定义: C + +内存模型中的基本存储单元是字节。 一个字节至less足够大以包含基本执行字符集的任何成员,并且由一个连续的位序列组成,其数目是由实现定义的。 这使我得出以下结论: 1 == sizeof(char) <= sizeof(short int) <= sizeof(int) <= sizeof(long int) sizeof告诉我们这个types有多less个字节。 而且,实现定义了多less位在一个字节中。 我们中的大多数人可能习惯于处理8位字节,但标准中说有一个字节有n位。 在这篇文章中 ,Alf P. Steinbach说: 长保证(至less)32位。 这在一切我都了解的基础types的大小在C ++根据标准的苍蝇。 通常情况下,我只是将这个陈述折扣为初学者是错误的,但是因为这是Alf,我决定进一步调查。 […]
以下是Sun的Java教程摘录: 一个开关与byte , short , char和int原始数据types一起工作。 它也适用于枚举types(在类和inheritance中讨论)以及一些特殊的类,它们包装特定的基本types: Character , Byte , Short和Integer (在Simple Data Objects中讨论)。 为什么不允许long原始数据types,这是一个很好的理由。 有人知道这是什么吗?
用什么方法来确定代表2 ^ x的位是1还是0?
看起来,当你在Java中键入一个数字时,编译器会自动把它作为一个整数来读取,这就是为什么当你input(long)6000000000(不在整数范围内)时,会抱怨说6000000000不是一个整数。 为了纠正这个问题,我不得不指定6亿次。 我刚刚了解了这个规范。 有其他的数字规格,如短,字节,浮点数,双? 这似乎是好的,因为(我认为),如果你可以指定你input的数字是一个简短的,那么Java不必投它 – 这是一个假设,纠正我,如果我错了。 我通常会自己search这个问题,但是我不知道这种数字规范甚至被称为什么。
我在Surface Pro 2平板电脑上运行Windows 7 x64,Java 7更新为45 x64(没有安装32位Java)。 下面的代码需要1688毫秒,当我是一个长的types和109毫秒时,我是一个整数。 为什么在64位JVM的64位平台上,long(64位types)比int要慢一个数量级? 我唯一的猜测是,CPU需要更长的时间来添加一个64位整数比32位,但似乎不太可能。 我怀疑Haswell不使用涟漪加法器。 我在Eclipse Kepler SR1中运行这个,顺便说一句。 public class Main { private static long i = Integer.MAX_VALUE; public static void main(String[] args) { System.out.println("Starting the loop"); long startTime = System.currentTimeMillis(); while(!decrementAndCheck()){ } long endTime = System.currentTimeMillis(); System.out.println("Finished the loop in " + (endTime – startTime) + "ms"); } […]
我试图传递一个大的string(24,000到50,000个字符)到一个自托pipe的TCP WCF服务。 我已经把maxStringContentLength(无处不在)设置为22008192。 我读了一些地方,我需要将bindingConfiguration更改为“LargeBuffer”或“LongFields”,但是当我这样做: <endpoint address="" binding="netTcpBinding" bindingConfiguration="LongFields" contract="ExStreamWCF.IService1"> 或这个: <endpoint address="" binding="netTcpBinding" bindingConfiguration="LargeBuffer" contract="ExStreamWCF.IService1"> 我的服务无法启动。 我真的需要这个错误消失。 有任何想法吗? 谢谢, 贾森 PS-config文件从服务器上的tcp服务: <system.serviceModel> <services> <service behaviorConfiguration="ExStreamWCF.Service1Behavior" name="ExStreamWCF.Service1"> <endpoint address="" binding="netTcpBinding" bindingConfiguration="" contract="ExStreamWCF.IService1"> <identity> <dns value="Devexstream-2.anchorgeneral.local" /> <!–<dns value="vmwin2k3sta-tn2" />–> </identity> </endpoint> <endpoint address="mex" binding="mexTcpBinding" bindingConfiguration="" contract="IMetadataExchange" /> <host> <baseAddresses> <add baseAddress="net.tcp://Devexstream-2:8080/Service" /> <!–<add baseAddress="net.tcp://vmwin2k3sta-tn2:8080/Service" />–> </baseAddresses> […]
为什么我需要添加一个“L”字母来获得正确的长值? 另一个价值是什么? long oneYearWithL = 1000*60*60*24*365L; long oneYearWithoutL = 1000*60*60*24*365; System.out.println(oneYearWithL);//gives correct calculation result : 31536000000 System.out.println(oneYearWithoutL)//gives incorrect calculation result: 1471228928