【发布时间】:2020-12-23 12:39:11
【问题描述】:
在没有任何内置原生 64 位支持的 32 位 C 编程环境中,但操作系统 API 的某些部分确实支持 64 位数字,我必须表示一个负值(范围 -8192 到包括-1)。大概我必须自己做数学。
typedef struct _LONGLONG {ULONG lo;LONG hi} LONGLONG;
LONGLONG x;
如何将这样一个负值分配给 x.lo 和 x.hi,以及(不太重要)也许我如何验证它是正确的数字?
我读过“Quadpart 有什么问题?”,但显然没有这样的东西可用。
【问题讨论】:
-
x.hi 是
LONG,所以它支持负数。此外,范围 [-8192, -1] 不需要 64 位。 -
32-bit C programming environment without any built-in native 64-bit你能分享一下那是什么“环境”吗?你用的是什么编译器?some parts of the operating system API's哪些部分?什么部位?您使用的是什么 API?您使用什么操作系统?你可以再详细一点吗?如果您的操作系统支持 64 位,那么如果 userapps 不支持,那就太奇怪了。I have to represent a negative value“代表”以什么方式? “如何”在您的“环境”中表示负数? (紧张地看着twos complement) -
FWIW:90 年代和 00 年代的不寻常环境,不知道 __int64 等等。顺便说一句,通用答案有所帮助。后来添加了一些 64 位功能,该应用程序已经测试用户是否安装了此类操作系统升级或更新版本。这没什么特别的,所以可能有点像 32 位版本的 Windows 通过使用 LARGE_INTEGER 来支持大文件?但是没有一些 Quadpart 或 __int64,或者现在人们所指的任何东西。
-
我确实不需要 64 位的范围,但 API 需要。我刚刚提到了表示 2 个字节应该足够的范围,因此不涉及溢出位(同时请记住,我不知道答案有多容易)。