GNU/Linux >> Linux の 問題 >  >> Linux

LinuxCプログラミングチュートリアルパート14-ビット演算子の実際の例

以前の記事の1つで、ビット演算子の基本について説明しました。その記事を読み、これらの演算子の実際の使用例を目撃して理解する準備ができていることを願っています。それで、これ以上面倒なことはせずに、始めましょう。

1。 2つの変数の値を交換する

2つの変数の値を交換するロジックをご存知だと思います。 3番目の変数を使用して、1つの値を一時的に格納し、その値を変数の1つに割り当てます(元の値はすでに他の変数に割り当てられています)。

たとえば、「a」と「b」が値を交換する必要のある変数であり、「c」が一時変数である場合、標準ロジックは次のようになります。

c = a;
a = b;
b = c;

しかし、このスワッピングプロセス全体がビット演算子を介して実行できることをご存知ですか?はい、それは真実です。その場合、ロジックは3番目の変数さえ必要としません。コードは次のとおりです:

#include <stdio.h>

int main()
{
int a, b;

printf("Enter first number: ");
scanf("%d", &a);

printf("Enter second number: ");
scanf("%d", &b);

printf("As per your input, a = %d, and b = %d", a,b);

a = a ^ b;
b = a ^ b;
a = a ^ b;

printf("\nAfter swapping, a = %d, and b = %d", a,b);


return 0;
}

出力は次のとおりです:

Enter first number: 7 
Enter second number: 2
As per your input, a = 7, and b = 2
After swapping, a = 2, and b = 7

2。数値の2進数「1」の数を確認してください

場合によっては、数値の「1」に設定されているビット数をカウントする必要がある状況に陥ることがあります。ビット演算子を使用してこれを簡単に実行できることを知ってうれしいでしょう。ロジックは次のとおりです。

#include <stdio.h>

int main()
{
int a, num_of_bits = 0;

printf("Enter a number: ");
scanf("%d", &a);

while(a)
{
if(a & 1)
num_of_bits++;

a = a >> 1;
}

printf("\nNumber of binary 1s in this number is %d", num_of_bits);

return 0;
}

出力は次のとおりです:

Enter a number: 5 

Number of binary 1s in this number is 2

3。指定されたビット位置が1かどうかをチェックするCプログラム

場合によっては、特にコンピュータネットワークに関連するコード(プロトコルなど)で作業する場合、特定のビット位置が1に設定されているかどうかを確認する必要があります。これは、ビット演算子を使用して簡単に実行できます。

コードは次のとおりです:

 #include <stdio.h>

int main()
{
int num, position, temp;

printf("Enter a number: ");
scanf("%d", &num);

printf("Enter the bit position (keeping zero as base index and 31 as max): ");
scanf("%d", &position);

if(((num>>position)&1) == 1)
printf("\nBit at the position is 1");
else
printf("\nBit at the position is 0");

return 0;
}

出力は次のとおりです:

Enter a number: 2 
Enter the bit position (keeping zero as base index and 31 as max): 3

Bit at the position is 0

4。 10進数を2進数に変換する

ビット演算子を使用して、10進数を2進数に変換することもできます。そのための1つのロジックは次のとおりです。

#include <stdio.h>

int main()
{
int num, i = 0, temp = 0;
int bin[32] = {0}; // this will initialize all array elements to 0

/* Input number from user */
printf("Enter any number: ");
scanf("%d", &num);

for(i =31; i>=0; i--)
{
if((num & 1) == 1)
{
bin[i] = 1;

num = num>>1;
}

printf("The binary form of the number you entered is: ");

for(i=0; i<32; i++)
{
printf("%d",bin[i]);
}

return 0;
}

私の場合の出力は次のとおりです。

Enter any number: 15 
The binary form of the number you entered is: 00000000000000000000000000001111
結論

ここで示した4つの例は、実際のシナリオでビット演算子を使用する方法についての良いアイデアを提供するのに十分なはずです。あなたのマシンでこれらを試してみて、それらを微調整して、それらにもっと多くのことをさせるか、何か新しいことをしてください。疑問や質問がある場合は、ここにコメントをドロップしてください。


Linux
  1. Cプログラミングチュートリアルパート5-文字変数

  2. LinuxCプログラミングチュートリアルパート10-可変スコープ

  3. Linux Cプログラミングチュートリアルパート9:文字列

  1. LinuxCプログラミングチュートリアルパート8-値による呼び出しとポインタ/アドレスによる呼び出し

  2. LinuxCプログラミングチュートリアルパート8-値による呼び出しとポインタ/アドレスによる呼び出し

  3. LinuxCプログラミングチュートリアルパート8-値による呼び出しとポインタ/アドレスによる呼び出し

  1. LinuxCプログラミングチュートリアルパート12-代入演算子と条件式

  2. Linux Cプログラミングチュートリアルパート11-算術演算子、リレーショナル演算子、および論理演算子

  3. LinuxCプログラミングチュートリアルパート15-2秒の補数と負の数