0

次の構成のどれが優先され、より高速であるかを知りたいです。

unsigned char str1 = (unsigned char)str2vsunsigned char str1 = str2 & 0xff
または
unsigned value1 = (unsigned)value2vsunsigned value1 = value2 & 0xffffffff

質問:
-からに変換することによって: -1番目は2番目(または)
よりも速いですか? -どちらを使いますか?どちらを使用するのが良いですか? -として変更できますか?0xff0xffffffff

(unsigned char)strstr & 0xff

4

2 に答える 2

4

これらの4つのコードスニペットのうち2つは同じことをしません。それらの間の速度の違いは、無関係であり(実行速度は速いが間違ったことを実行するコードは無意味であるため)、無視できる程度です(すべてかなり高速です)。

更新された質問の編集:

それを仮定するとCHAR_BIT == 8、それstrは次のいずれかです。符号なし整数。正の値を持つ符号付き整数。2の補数表現を持つ符号付き整数。次に(unsigned char) str、と同じ数値結果を返しますstr & 0xffが、タイプが異なります。どちらを作成しても、コンパイラーはその結果を計算するための高速な方法を選択します。どちらの場合も同じ方法である可能性があります。したがって、情報を失う暗黙の変換に対して発生するコンパイラ警告を抑制するために、必要に応じてを記述unsigned char str1 = str2;し、にキャストを追加することもできます。(unsigned char)

ほとんどの実装でunsignedは、は32ビットタイプであり、その場合は65535より大きい(unsigned)value2値とは異なる値を生成value2 & 0xffffします。それを除いて(16ビット実装を使用していると仮定すると)、提供されているタイプもあることを除いて、と同じです。その場合、結果は同じタイプと同じ値になります。value2unsigned charvalue2unsigned

于 2012-05-15T14:39:07.563 に答える
0

strキャストの効果は、とのタイプに大きく依存しvalueます。
たとえば、の場合、キャストしても何も起こりません。良いか悪いかは関係ありませんstr。それが物事を変えるなら、そしてポインターなら-それは完全に別の問題です。unsigned charunsigned charint

パフォーマンスに関して-それはあなたが心配すべき最後のことです。違いがあるとしても、それはごくわずかです。重要な場所で最適化の取り組みを行います。

于 2012-05-15T15:06:59.423 に答える