如何写C代码在64位定点?

B

boeysue

Guest
如何写一个64位定点C在Unix代码?因为在UNIX中,操作的64位定点是不正确的...所以
, 谁能告诉我如何用C 64位定点操作代码为帮助!感谢!

 
64位整数的语法往往是非32位编译器移植。你是哪个编译器使用,以及哪些问题是您是否看到?后一个小程序
, 演示此问题。

这MinGW的海湾合作委员会3.4.2作品,但很长的,当地雇员,以及%I64d可能在你的编译器不同:
代码:

#包括<stdio.h>

廉政主体(无效)



很长的1 = 1122334455667788LL分,B = 1000;

printf(“产品=%I64d \ N”的,一*二);

返回0;

)产品= 1122334455667788000
 
64位长的长
与移位操作和 似乎是错误的。
因为我使用服务器来改变32位
, 直接向64位,这似乎已经饱和了2 ^ 16。
因此
, 我只是想在ANSI不支持运行64位操作。
顺便说一下,答案是什么
, 以帮助我的转变/添加运行在64位!
非常感谢。

 
告诉我们你的编译器版本
, 并告诉我们您的非工作守则
, 使我们可以帮助您。
to change 32-bit to 64-bit??

你是什么意思,使用 服务器
来改变32位到64位??

没有指定的ANSI的位数。这是编译器的依赖。

 
其实我只是做了议会抽取滤波器
, 正如我的抽取是128,我的舞台是五阶的话,我看到流棒的输出为2 ^ 16。
顺便说一下,如何使用MATLAB的cicdecim命令呢?IWL / OWL的设置似乎很奇怪,也许我得到这个错误的观念有关。
plz帮助我..

 
我从未用过的MATLAB的过滤器。键入此命令来查看信息和例子很多:

doc的mfilt.cicdecim
 
其实我用的输入1 / -1,并设置IWL = 1,有很多警告消息。
但是
, 如果我使用IWL = 2,输出码流接缝误差..
因此
, 我想混淆的MathWorks的介绍。

 
工会(
无符号长x;
无符号长的Y;
);

这是一个64位整数是否正确?

 
工会(
无符号长x;
无符号长的Y;
);

这是一个64位整数是否正确?

没有无符号长x和y在同一个地方居住。大小等于结构

sizeof最长的数据类型。

sizeof(联合(符号长x;无符号长的Y;))= sizeof(无符号长);你可以这样定义

typedef结构

无符号长upperPart;
无符号长lowerPart;
)int_64_Bits;

但是你不能直接使用这种结构在arihtmetic行动。您肥大经营者或自定义函数

 
嗯..
你的意思是它需要采取除了两个32位的一部分?
但如何做好加入和繁殖的运作?
特别是乘....
感谢回答。

 
如何使用Unix的两个部分没有装配?
由于进位位后
, 加法运算,这是问题
, 我无法理解。
plz帮助。

 
看看:ftopic102863.html
还有的<inttypes.h>头文件定义。

 
你能更清楚地?
哪些参数或变量做它用呢?
因为我打印__WORDSIZE,这是32.I dont使用64延长,该位operation.Thanks它。7分钟后添加:这似乎是问题...
长期长x = 0x01“”33;
printf(“%× \ ñ”,x)的;

但我不知道为什么
, 以下是正确的:
长期长x = 0x01;

printf(“%× \ N”的,x“”33);

感谢帮助lorh ..
这似乎困扰着我
, 只要长的时间。

顺便说一句,我使用的编译器是gcc 2.96。12分钟后添加:嗯..
机器为i686。/ /与uname - m
编译器是gcc - 2.96。/ /男子海湾合作委员会
以及如何获得更多的信息
, 在指挥?

感谢帮助...

 
Boeysue,最后你给我们一些信息!但是这还不够。

如果您编译
, 随着壁选项(全警告),海湾合作委员会应该提醒您
, 您的printf有不一致的廉政格式和参数的类型。您的%×告诉printf承担起你的编译器的int参数(显然32位)。尝试%llx或%I64x代替。我不能确切的语法猜测,因为它在您的操作系统和精确的编译器版本(类型海合会-版)而定。

...此外...

好吧,i686意味着它是一个奔腾框。32位整数你决定。我还没有确切的编译器使用的,但%llx是一个很好的候选人。试试吧!

我不明白“如何获得更多的信息
, 在指挥?”。也许你问壁。我运行这样的编译器:
海湾合作委员会壁myprogram.c

 
这似乎是问题...
长期长x = 0x01“”33;
printf(“%× \ ñ”,x)的;

但我不知道为什么
, 以下是正确的:
长期长x = 0x01;

printf(“%× \ N”的,x“”33);事实上,在长期长x = 0x01“”33 ;//<----发生这种情况
, 是错误的...
该警告消息左移超过该类型的宽度。
但是
, 当我打印sizeof一段很长的是8。所以我混淆了这一点。

 
长期长x = 0x01“”33;

不,0x01是32位的编译器上的廉政,所以转移了33位
, 这会给您的麻烦。你将与这更好的运气:

长期长x = 0x01LL“”33;这个什么你的编译器的输出?

长期长x = 0x01;printf(“%× \ N”的,x“”33);

我期望“0”,或者“2”,但不理想的结果“二亿”

我猜测
, 这将产生预期的结果“2.00亿”:

长期长x = 0x01;printf(“%llx \ N”的,x“”33);
 
嗯...
没错...这将帮助我不要做对work.Because我看到许多文件
, 不支持建议的事情很多nonuseless写超过32位code.So以上的讨论可以帮助我更多,谢谢。

 
稀释!看得多
, 是对我们帮助
, 当你告诉我们你的源代码?

<img src="http://www.edaboard.com/images/smiles/icon_wink.gif" alt="眨眼" border="0" />这些网页也可能会有所帮助:

海湾合作委员会手册第4.10(描述了“当地雇员”和“很长的”):
http://gcc.gnu.org/onlinedocs/gcc-2.95.3/gcc_4.html#SEC71

glibc的printf()的整数精度说明(描述了“当地雇员”):
http://www.gnu.org/software/libc/manual/html_node/Integer-Conversions.html#整数%20Conversions

海湾合作委员会是一个很好的编译器。如果它做错事
, 我没有想到,它通常是我的错!

 
是否有任何关于退出海湾合作委员会的详细文件的工具?帮助感谢:sm9:

 

Welcome to EDABoard.com

Sponsor

Back
Top