在32位C编程环境中,没有任何内置的本机64位支持,但API操作系统的某些部分确实支持64位数字,我必须表示一个负值(范围为-8192,包括-1(。大概我得自己算。
typedef struct _LONGLONG {ULONG lo;LONG hi} LONGLONG;
LONGLONG x;
我如何将这样一个负值分配给x.lo和x.hi,(不太重要(也许我如何验证它是正确的数字?
我读过关于";四边形有什么问题&";,但显然没有这样的东西。
位仅根据某些类型方案表示值。问题没有说明使用什么方案使lo
和hi
中的比特表示值。为了这个答案的目的,我们将假设:
LONG hi
是一个32位2的补码整数ULONG lo
是一个32位无符号整数- 使用该
LONGLONG
结构的API将lo
和hi
解释为由hi
的比特作为64比特数的高32比特并且low
的比特作为低32比特形成的64比特2的补数
在这种情况下,如果n
是[-8192,−1]中的一个值,则64位二的补码表示的高32位都是1,而低32位与n
的32位二的补码表示的32位相同。因此,LONGLONG x
的所需比特模式可以设置为:
x.hi = -1;
x.lo = n;
注意,由于x.lo
是无符号的,因此赋值x.lo = n
将把有符号的n
转换为无符号的。此转换将通过包装模232来完成,并且x.lo
的32位无符号值与n
的32位二的补码值具有相同的位模式,因此实现了所需的结果。