2016-12-05 54 views
1

我试图实现C.改进的连续的乘法算法,其中乘积寄存器的尺寸为被乘数和乘数的两倍的尺寸。在C中,一个int是4个字节,而一个long int是8个字节。我想独立访问更高和更低的32位。所以我指出的低位和高位,如:长整型高和低比特指针

long long int product = 0; 
int* high = &product; 
int* low = &product; 
low++; 

但这并没有工作,因为我认为,如果一个int被分配4个字节,然后一个长整型将被分配8个字节,该指针将指向分配的内存的MSB。我不确定这是否实际上是如何分配的。任何人都可以帮我解决这个困惑。

我使用这样做解决了这个问题:

long long int product=0; 
int* low = &product; 
int* high = &product; 
high++; 

,但我仍然感到困惑的是为什么它工作正常;

+0

产品的大小应该是操作数大小的总和。 –

+2

你需要知道字节顺序。 –

+4

[字节序(https://en.wikipedia.org/wiki/Endianness) –

回答

2

您可能正在使用的计算机是Little-Endian。在小端机器上,最低有效字节是第一个。