0

私はshortを使用して(割り当てにはshortを使用する必要があります。そうでない場合はintを使用します)、0〜31の値をスキャンしてから、単一の整数を使用してこれらのスキャンされた値の6つを格納します。

これは私がこれまでに持っているものです:

int vals = 0;
short ndx, newVal;

/* more printing/scanning and error checking in between */

newVal = newVal << (5*ndx);
vals = vals | newVal;

スポット4または5に有効な値を配置しようとすると、機能せず、0のままになります...これは、shortの長さが2バイトしかないため、ビット単位の左シフトで全体の価値?そして、これが問題である場合、それを修正するために追加できるキャストの種類はありますか?

4

1 に答える 1

0

それはまさにあなたが考えたことです。ビットごとのシフトを使用し、結果を短い変数 (newVal) に割り当てました。これを行うと、計算が 32 ビットで行われたとしても、結果は切り捨てられ、最下位 16 ビットの 0 しか得られません。

int の使用を控えたい場合は、newVal 変数を完全に削除して、計算してください。vals = vals | ((something) << (some other thing));

于 2013-02-15T14:37:56.263 に答える