2016-12-05 18 views
1

私はCで改良された逐次乗算アルゴリズムを実装しようとしています。ここでは、積レジスタのサイズは被乗数と乗数の2倍です。 C言語ではintは4バイト、long intは8バイトになります。私は独立して上位32ビットにアクセスしたいと思っていました。私は、INTは、その後4つのバイトを割り当てられている場合、長いintは8つのバイトを割り当てることになるポインタが指すであろうと考えているためlong int上位と下位のポインタ

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

が、これは動作しませんでした。私は次のように下位と上位ビットを指摘しました割り当てられたメモリの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というコンピュータを使用しています。リトルエンディアンマシンでは、最下位バイトが先頭です。

関連する問題