2011-12-08 18 views
0

8ビット整数(int8_t)と32ビット整数(int)の間のビット単位ANDを実行すると、結果は8ビット整数または32ビット整数?私はC++の8ビット整数と32ビット整数のビット単位の論理和

はビット単位を実行する前に、少し違った質問を入れて、廃棄された32ビット整数の最初の24ビットである、または最初の型キャスト8ビットの整数であるためにGNU/LinuxやGCCコンパイラを使用しています

32ビット整数へ?

EDIT:この小さなコード

#include <iostream> 
#include <stdint.h> 
int main() 
{ 
    int i=34; 
    int8_t j=2; 

    std::cout<<sizeof((i&j))<<std::endl;//Bitwise and between a 32 bit integer and 8 bit integer 
    return 0; 
} 

私はそれを引き受けることになる。4.として出力結果は32ビット整数は、次にであることを意味し得ます。しかし、その結果がマシン、コンパイラ、OSに依存するかどうかはわかりません。

+0

あなたはそれをテストして何が起こったかを見てみることができます...少なくともあなたの問題を解決しようとしたことを示してください... – Dan

+0

8ビット整数はおそらくアップキャストですが、確かに。 – Gnat

+0

@ダンこの試行の編集をご覧ください。 – smilingbuddha

答えて

6

&演算子(および他のほとんどの演算子)の場合、intより小さいオペランドは、演算が評価される前にintに昇格されます。 C99規格(6.5.10 - ビット単位のAND演算子を記載)から

通常の算術変換は、オペランドに対して実行されます。

(6.3.1.8 - 通常の算術変換を記述する):

整数キャンペーンは両方のオペランド

(6.3.1.1 - 整数プロモーションを説明する)上で実行されます

intが元のタイプのすべての値を表すことができる場合、値はに変換されます;それ以外の場合はunsigned intに変換されます。これらは整数 プロモーションと呼ばれます。

0

intより小さい整数型は、操作が実行される前にintに昇格されます。 CERT Secure Coding Standardが「整数変換ルールの理解」について何を述べているかを見てみるとよいでしょう。

1

8ビット整数は32ビット整数に型キャストされます。ビット単位の演算子は通常の算術変換をトリガーします(これは、小さい方の型がより大きい値に一致するように昇格されることを意味します)。これは、仕様の第5.1章で定義されています。

2

言語が何を指定しているかにかかわらず、問題の答えは、ビット24で実行される前に上位24ビットが削除されて実行されても問題ではないということです。その結果

関連する問題