2016-12-05 10 views
1

Я пытаюсь реализовать улучшенный алгоритм последовательного умножения в C., где размер регистра продукта в два раза превышает размер умножителя и множителя. в C int имеет 4 байта, а long int составляет 8 байтов. Я хотел получить доступ к более высоким и более низким 32-битам независимо. поэтому я указал на нижние и верхние биты, как:указатели long int high и low bits

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

, но это не сработало, потому что я думал, что если ИНТ отводится 4 байта, то длинный ИНТ будет выделено 8 байт и указатель будет указывать на MSB выделенной памяти. Я не уверен, действительно ли это, как распределение. кто-нибудь может помочь мне очистить эту путаницу.

Я решил эту проблему, используя при этом:

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

, но я до сих пор путают, что почему она работает правильно;

+0

Размер продукта должен быть суммой размера операндов. –

+2

Вам нужно знать об истинности. –

+4

[Endianness] (https://en.wikipedia.org/wiki/Endianness) –

ответ

2

Возможно, вы используете компьютер Little-Endian. На машинке с маленькой конечностью первым является младший байт.