1

intの最下位バイトと最上位バイトを別々にチェックしようとしています。

最下位バイトのいずれかのビットが1であるかどうかを確認したいと思います。trueの場合は1、falseの場合は0を返したい。私の試み:

int lsb_one(int x) {
  return ( (x & 0xffff) != 0 );
}

最上位バイトのビットがゼロかどうかを確認したい。trueの場合は1、falseの場合は0を返したい。私の試み:

int msb_zero(int x) {
  return ( (~(x & 0x0000ffff)) != 0 );
}

ポインタはありますか?

4

2 に答える 2

3

試す:

int lsb_one(int x) {
    return ((x & 0xff) != 0 );
}

int msb_zero(int x) {
    return ((x & 0xff000000) != 0xff000000);
}

intが32ビット値であると仮定すると、2番目のバージョンはプラットフォームに依存することに注意してください。

于 2013-01-10T03:55:21.723 に答える
0

他の回答がすでに指摘しているように、バイトは通常8ビットであるため、マスクを使用する必要があり0xffます0xffffmsb_zero関数の実装を独立させるには、次のように使用CHAR_BITsizeof()ます。

#include <limits.h>

int msb_zero(int x) {
  return (x & (0xff << (sizeof(int) * CHAR_BIT - CHAR_BIT))) != 0;
}

CHAR_BITinは、limits.hビット数が1文字/バイトであることを示します。

編集完全を期すために、lsb_one関数は次のとおりです。

int lsb_one(int x) {
    return ((x & 0xff) != 0 );
}
于 2013-01-10T04:26:29.437 に答える