6

HIGH と LOW の 2 つの文字があり、それらを HIGH + LOW の左 2 ビットに対応する int に変換したいと考えています。

私は次のようなものを試しました:

unsigned char high;
unsigned char low;
high = 128; // 10000000
low= 128; // 10000000
int result; (should be high 10000000 + 2 left bites of low 10 = 1000000010)
// To do
return result;

より明確にするために編集されました。

私が選んだ解決策は次のとおりです。

return high*4 + (low >> (CHAR_BIT - 2));
4

2 に答える 2

3

HIGHand をLOWas として宣言しchar*ますが、それらをポインターとして使用しません。次のコードは正常に機能します (ところで、定数を使用しない場合は大文字の識別子を避けてください)。

char high = 125;
char low = 12;

これが私があなたの質問を理解する方法です(もっと理解しやすいかもしれません):

#include <limits.h>

int result = high + (low >> (CHAR_BIT - 2));
于 2012-12-15T17:01:53.833 に答える
1

intHIGH と LOW の 2 つの文字があり、対応する HIGH + LOW の左 2 ビットに変換したいと思います。

あなたの仕様は明確ではありません。与えられた:

unsigned char HIGH = 152;
unsigned char LOW  =  12;

次のことを意味します。

int result = HIGH + (LOW >> 6);   // Assuming CHAR_BIT == 8

または、次のことを意味します。

int result = HIGH + (LOW & 0xC0);

または、次のことを意味します。

int result = (HIGH << 2) | (LOW >> 6);

あるいは、別の意味を持っているかもしれません。質問に示されている値について、最初の 2 つの式は同じ答えを生成します。

より意味のある回答を得るには、要件をより慎重に説明する必要があります。実際のコードは、指定した要件とはほとんど関係がありません。2 つのchar *変数があります。ほぼ確実に無効なアドレスに初期化します。初期化しませんresult。あなたの計算はせいぜい奇妙です。

于 2012-12-15T17:14:03.963 に答える