NekoC

猫でもわかるC言語の個人的なまとめ資料

View on GitHub

04_式と演算子

代入演算子の評価のタイミング

サンプルコード


#include <stdio.h>
#include <stdlib.h>

int main()
{
	int a1, a2, a3, a4;

	a1 = 5;
	a1 = a1 + 2;
	printf("----------------------\n");
	printf("a1 = 5;\n");
	printf("a1 = a1 + 2;\n");
	printf("----------------------\n");
	printf("a1 = %d\n", a1);

	a2 = 5;
	a2 += 2;
	printf("----------------------\n");
	printf("a2 = 5;\n");
	printf("a2 += 2;\n");
	printf("----------------------\n");
	printf("a2 = %d\n", a2);

	a3 = 5;
	a3 = a3++ + 2;
	printf("----------------------\n");
	printf("a3 = 5;\n");
	printf("a3 = a3++ + 2;\n");
	printf("----------------------\n");
	printf("a3 = %d\n", a3);

	a4 = 5;
	printf("----------------------\n");
	printf("a4 = 5;\n");
	printf("表示時に a4++ + 2 する。\n");
	printf("----------------------\n");
	printf("a4 = %d\n", a4++ + 2);

	system("pause");
	return 0;
}

出力結果


----------------------
a1 = 5;
a1 = a1 + 2;
----------------------
a1 = 7
----------------------
a2 = 5;
a2 += 2;
----------------------
a2 = 7
----------------------
a3 = 5;
a3 = a3++ + 2;
----------------------
a3 = 8
----------------------
a4 = 5;
表示時に a4++ + 2 する。
----------------------
a4 = 7
続行するには何かキーを押してください . . .

キャスト演算子

サンプルコード


#include <stdio.h>
#include <stdlib.h>

int main()
{
	int _int1 = 10, _int2 = 4;
	double _double;

	_double = _int1 / _int2;

	printf("%d ÷ %d = %f・・・(1)\n", _int1, _int2, _int1 / _int2);
	printf("%d ÷ %d = %f・・・(2)\n", _int1, _int2, _double);
	printf("%d ÷ %d = %f・・・(3)\n", _int1, _int2, (double)_int1/_int2);

	system("pause");

	return 0;

}

出力結果


10 ÷ 4 = 0.000000・・・(1)
10 ÷ 4 = 2.000000・・・(2)
10 ÷ 4 = 2.500000・・・(3)
続行するには何かキーを押してください . . .

ビット演算子(ビット論理演算子)

演算子 意味
& ビット積演算子。どちらも1なら1
| ビット和演算子。どちらか1なら1
^ ビット差演算子。異なれば1

サンプルコード


#include <stdio.h>
#include <stdlib.h>

int main(){

	unsigned short a, b;

	a= 1;
	b = 3;

	printf("-----------------------------\n");
	printf(" a      = 0000 0000 0000 0001\n");
	printf(" b      = 0000 0000 0000 0011\n");
	printf(" a & b  = 0000 0000 0000 0001\n");
	printf("-----------------------------\n");
	printf("積 a & b = %d\n", a & b);
	printf("\n\n");


	printf("-----------------------------\n");
	printf(" a      = 0000 0000 0000 0001\n");
	printf(" b      = 0000 0000 0000 0011\n");
	printf(" a | b  = 0000 0000 0000 0011\n");
	printf("-----------------------------\n");
	printf("和 a | b = %d\n", a | b);
	printf("\n\n");


	printf("-----------------------------\n");
	printf(" a      = 0000 0000 0000 0001\n");
	printf(" b      = 0000 0000 0000 0011\n");
	printf(" a ^ b  = 0000 0000 0000 0010\n");
	printf("-----------------------------\n");
	printf("差 a ^ b = %d\n", a ^ b);
	printf("\n\n");

	system("pause");
	return 0;
}

出力結果


-----------------------------
 a      = 0000 0000 0000 0001
 b      = 0000 0000 0000 0011
 a & b  = 0000 0000 0000 0001
-----------------------------
積 a & b = 1


-----------------------------
 a      = 0000 0000 0000 0001
 b      = 0000 0000 0000 0011
 a | b  = 0000 0000 0000 0011
-----------------------------
和 a | b = 3


-----------------------------
 a      = 0000 0000 0000 0001
 b      = 0000 0000 0000 0011
 a ^ b  = 0000 0000 0000 0010
-----------------------------
差 a ^ b = 2


続行するには何かキーを押してください . . .

サンプルコード2


#define CAT 1 /*CATを1と定義*/
#define DOG 2 /*CATを1と定義*/
#define RAT 4 /*CATを1と定義*/
#define RABBIT 8 /*CATを1と定義*/

# include <stdio.h>
# include <stdlib.h>

int main()
{
	int aPet = CAT | DOG; /*Aさんのペット*/
	int bPet = RAT; /*Bさんのペット*/
	int cPet = CAT | DOG | RAT | RABBIT; /*Cさんのペット*/
	int dPet = DOG | RAT; /*Dさんのペット*/

	printf("Aさんのペット(猫=%d, 犬=%d, ネズミ=%d, ウサギ=%d)\n",
		(aPet & CAT) != 0, (aPet & DOG) != 0, (aPet & RAT) != 0, (aPet & RABBIT) != 0);

	printf("Bさんのペット(猫=%d, 犬=%d, ネズミ=%d, ウサギ=%d)\n",
		(bPet & CAT) != 0, (bPet & DOG) != 0, (bPet & RAT) != 0, (bPet & RABBIT) != 0);

	printf("Cさんのペット(猫=%d, 犬=%d, ネズミ=%d, ウサギ=%d)\n",
		(cPet & CAT) != 0, (cPet & DOG) != 0, (cPet & RAT) != 0, (cPet & RABBIT) != 0);

	printf("Dさんのペット(猫=%d, 犬=%d, ネズミ=%d, ウサギ=%d)\n",
		(dPet & CAT) != 0, (dPet & DOG) != 0, (dPet & RAT) != 0, (dPet & RABBIT) != 0);

	system("pause");

	return 0;
}

出力結果


Aさんのペット(猫=1, 犬=1, ネズミ=0, ウサギ=0)
Bさんのペット(猫=0, 犬=0, ネズミ=1, ウサギ=0)
Cさんのペット(猫=1, 犬=1, ネズミ=1, ウサギ=1)
Dさんのペット(猫=0, 犬=1, ネズミ=1, ウサギ=0)
続行するには何かキーを押してください . . .

解説

  aPet       = 00000011
  CAT        = 00000001
  aPet & CAT = 00000001

  aPet       = 00000011
  DOG        = 00000010
  aPet & CAT = 00000010

  aPet       = 00000011
  RAT        = 00000100
  aPet & CAT = 00000000

  aPet          = 00000011
  RABBIT        = 00001000
  aPet & RABBIT = 00000000

to be continued