0

知りたいのですが、2 つの整数が乗算され、結果が short に型キャストされ、short に割り当てられた場合、コンパイラはそれを何に解決しますか? 以下はコードスニペットです

int a=1,b=2,c;
short x=3,y=4,z;

int p;
short q;

int main()
{

c = a*b; /* Mul two ints and assign to int
            [compiler resolves this to __mulsi3()] */

z = x*y; /* Mul two short and assign to short
            [compiler resolves this to __mulhi3()] */

p = (x*y); /* Mul two short and assign to int
              [compiler resolves this to __mulsi3()] */

q =(short)(a*b); /* Mul two ints typecast to short and assign to short
                    [compiler resolves this to __mulhi3()] */

return 0;

} 

ここで の場合q =(short)(a*b);、最初の 2 つの int 乗算を ( を使用して__mulsi3()) 実行し、それを short に割り当てます。しかし、ここではそうではありません。コンパイラの型は と の両方を short にキャストしabから、 を呼び出します__mulhi3()

上記の要件を達成できるように、gcc ソース コード [どのファイル] を変更する方法を知りたいです。

4

1 に答える 1

0

コンパイラはコードを分析し、結果をすぐに変換すると、結果に影響を与えることなく乗算を乗算shortとして実行できることを確認できますshort。これは、例のケース 2 とまったく同じです。

結果は同じなので、どの乗算関数を使用するかを気にする必要はありません。

于 2012-06-29T05:26:53.213 に答える