0

N は 4 ビットの整数で、C を使用して数値の他の 3 ビットを変更せずに LSB を 1 に変更する必要がある数値 N を受け取ります。

基本的に、すべてXXX1を読む必要があります。

つまりn = 2、バイナリは0010. LSB を 1 に変更して、数値を0011.

これを行う操作の組み合わせを見つけるのに苦労しています。私は、、、、、、、、、、、!で働い~ています。&_ |_^<<>>+-=

これは本当に私を夢中にさせており、私は>>/<<で遊んでいて~、 から始めました0xF

4

4 に答える 4

2

試す

number |= 1;

これにより、数値に関係なく LSB が 1 に設定されます。なんで?ビットごとの OR ( |) 演算子は、その名前が示すとおり正確に実行されるため、2 つの数値のビットを論理 OR します。たとえば、1010b と 1b (10 進数で 10 と 1) がある場合、演算子は次のようにします。

   1 0 1 0
OR 0 0 0 1
=  1 0 1 1

そして、それはまさにあなたが望むものです。

ご参考までに、

number |= 1;

ステートメントは次と同等です

number = number | 1;
于 2012-09-08T04:19:17.857 に答える
0

x = x | 0x01;LSBを1

視覚化

      ?  ?  ?  ?  ?  ?  ?  ?
   OR
      0  0  0  0  0  0  0  1
      ----------------------
      ?  ?  ?  ?  ?  ?  ?  1

したがって、LSB が 1 に設定されていることを除いて、他のビットは同じままです。

于 2012-09-08T04:19:25.893 に答える
0

ビットごとの or 演算子を使用し|ます。2 つの数値をビットごとに調べ、各ビットで OR を実行して生成された数値を返します。

int n = 2;
n = n | 1;
printf("%d\n", n); // prints the number 3

バイナリでは、2 = 0010、3 = 0011、および 1 = 0001

   0010
OR 0001
-------
   0011 
于 2012-09-08T04:20:31.250 に答える
0

そうnでない場合0

n | !!n

動作します。

である場合、nはあなたが望むものです。0!n


アップデート

ファンシーワンライナー:P

n = n ? n | !!n : !n;
于 2012-09-08T04:21:06.010 に答える