C言語の勉強3 データ型、演算子

最終更新:2006/06/18

トップページへ戻る
Page1 Page2 Page3 Page4 Page5
ページ目次
  1. データ型
  2. 演算子

1. データ型

      C言語の主なデータ型は以下の通りです。
型の種類 型 ※[ ]内は省略可 ビット数 範囲
整数型 signed char 8ビット -128〜127
unsigned char 8ビット 0〜255
short [int] 16ビット -32768〜32767
unsigned short [int] 16ビット 0〜65535
int 32ビット -2147483648〜2147483647
unsigned [int] 32ビット 0〜4294967295
long [int] 32ビット -2147483648〜2147483647
unsigned long [int] 32ビット 0〜4294967295
文字型 char 8ビット -128〜127 または 0〜255
signed char 8ビット -128〜127
unsigned char 8ビット 0〜255
浮動少数点型 float 32ビット 約10-38〜約1038
double 64ビット 約10-308〜約10308

/*
    各データ型に割り当てた値を表示
*/

#include <stdio.h>

int main(void)
{
    signed char hensu1 = 'A';
    unsigned char hensu2 = 'B';
    short hensu3 = 1234;
    unsigned short hensu4 = 1234U;
    int hensu5 = 1234;
    unsigned hensu6 = 1234U;
    long hensu7 = 1234L;
    unsigned long hensu8 = 1234UL;
    char hensu9 = 'A';
    signed char hensu10  = 'B';
    unsigned char hensu11  = 'A';
    float hensu12 = 1.2F;
    double hensu13 = 3.45E6;

    printf("%c, %d\n",hensu1,hensu1);
    printf("%c, %d\n",hensu2,hensu2);
    printf("%d\n",hensu3);
    printf("%u\n",hensu4);
    printf("%d\n",hensu5);
    printf("%u\n",hensu6);
    printf("%ld\n",hensu7);
    printf("%lu\n",hensu8);
    printf("%d\n",hensu9);
    printf("%c, %d\n",hensu10,hensu10);
    printf("%c, %d\n",hensu11,hensu11);
    printf("%f, %e\n",hensu12,hensu12);
    printf("%f, %e\n",hensu13,hensu13);

    return (0);
}
      実行結果
A, 65
B, 66
1234
1234
1234
1234
1234
1234
65
B, 66
A, 65
1.200000, 1.200000e+000
3450000.000000, 3.450000e+006

2. 演算子

    (1) 算術演算子

      変数や数値に対して処理を行うのが「算術演算子」です。
内容
a + b aとbを足す
a - b aからbを引く
a * b aとbを掛ける
a / b aをbで割る
a % b aをbで割った余り

/*
    算術演算子
*/

#include <stdio.h>

int main(void)
{
    /* 算術演算子の使用例 */
    printf("5 + 2 = %d\n", 5 + 2);
    printf("5 - 2 = %d\n", 5 - 2);
    printf("5 * 2 = %d\n", 5 * 2);
    printf("5 / 2 = %d\n", 5 / 2);
    printf("5 %% 2 = %d\n", 5 % 2);

    return(0);
}
      実行結果
5 + 2 = 7
5 - 2 = 3
5 * 2 = 10
5 / 2 = 2
5 % 2 = 1
    (2) 代入演算子

      変数に対して、ある値を代入する処理を行うのが「代入演算子」です。
      基本的には、代入演算子の右側に記述されている値や式などを、
      演算子の左側に記述されている変数に対して代入します。
内容
a = b aにbを代入する
a += b aにa+bを代入する
a -= b aにa-bを代入する
a *= b aにa*bを代入する
a /= b aにa/bを代入する
a %= b aにa%bを代入する

/*
    代入演算子
*/

#include <stdio.h>

int main(void)
{
    /* 代入演算子の使用例 */
    int a;
    printf("a = 5 → %d\n",a = 5);
    a += 2;	/* a = a + 2と同じ */
    printf("a += 2 → %d\n", a);
    a = 5;
    a -= 2;	/* a = a - 2と同じ */
    printf("a -= 2 → %d\n", a);
    a = 5;
    a *= 2;	/* a = a * 2と同じ */
    printf("a *= 2 → %d\n", a);
    a = 5;
    a /= 2;	/* a = a / 2と同じ */
    printf("a /= 2 → %d\n", a);
    a = 5;
    a %= 2;	/* a = a % 2と同じ */
    printf("a %= 2 → %d\n", a);

    return(0);
}
      実行結果
a = 5 → 5
a += 2 → 7
a -= 2 → 3
a *= 2 → 10
a /= 2 → 2
a = 2 → 1
    (3) 増分・減分演算子

      変数を1増やしたり, 減らしたりします。
      ただし演算氏を変数の前に置くか, 後ろに置くかで,
      式の結果として使用される値が異なります。

/*
    増分・減分演算子
*/

#include <stdio.h>

int main(void)
{
    /* 増分・減分演算子の使用例 */
    int a = 5;
    /* 変数の値を表示してから1増やす */
    printf("a++ → %d\n", a++);
    a = 5;
    /* 変数を1増やしてから値を表示する */
    printf("++a → %d\n", ++a);
    a = 5;
    /* 変数の値を表示してから1減らす */
    printf("a-- → %d\n", a--);
    a = 5;
    /* 変数を1減らしてから値を表示する */
    printf("--a → %d\n", --a);

    return(0);
}
      実行結果
a++ → 5
++a → 6
a-- → 5
--a → 4
    (4) 関係演算子

      2つの値の関係を条件に従って調べ, true(真)またはfalse(偽)を返します。
内容
a == b aとbが等しいときに真
a != b aとbが等しくないときに真
a > b aがbより大きいときに真
a >= b aがbより大きいか等しいときに真
a < b aがbより小さいときに真
a <= b aがbより小さいか等しいときに真

/*
    関係演算子
*/

#include <stdio.h>

int main(void)
{
    /* 関係演算子の使用例 */
    printf("5 == 5 → %d\n", 5 == 5);
    printf("5 != 5 → %d\n", 5 != 5);
    printf("5 < 5 → %d\n", 5 < 5);
    printf("5 <= 5 → %d\n", 5 <= 5);
    printf("5 >= 5 → %d\n", 5 >= 5);

    return(0);
}
      実行結果
5 == 5 → 1
5 != 5 → 0
5 < 5 → 0
5 <= 5 → 1
5 >= 5 → 1
    (5) 論理演算子
内容
a & b aとbの論理積(AND)
a | b aとbの論理和(OR)
a ^ b 排他的論理和(XOR: exclusive OR)
!a aの否定(NOT)
a && b aとbの論理積(ショートカット演算子)
a || b aとbの論理和(ショートカット演算子)

/*
    論理演算子
*/

#include <stdio.h>

int main(void)
{
    int a = 1, b = 0;
    int c = 9, d = 12;	/* 9 = 1001, 12 = 1100 */

    printf("a = %d", a);
    printf(", b = %d\n", b);
    printf("a & b : %d\n", a & b);
    printf("a | b : %d\n", a | b);
    printf("a ^ b : %d\n", a ^ b);
    printf("\n");
    printf("1001 & 1100 : %d\n", c & d);
    printf("1001 | 1100 : %d\n", c | d);
    printf("1001 ^ 1100 : %d\n", c ^ d);

    return(0);
}
      実行結果
a = 1, b = 0
a & b : 0
a | b : 1
a ^ b : 1

1001 & 1100 : 8
1001 | 1100 : 13
1001 ^ 1100 : 5
    (6) ビットシフト演算子

      ビットシフト演算子は、左にシフトさせるものと,右にシフトさせるものがあります。
内容
a >> n aを符号を保持したままnビット右にシフトさせる
a << n aを0埋めしながらnビット左にシフトさせる

/*
    ビットシフト演算子
*/

#include <stdio.h>

int main(void)
{
    int a = 16, b = -16, c = 16, d = 4;
    printf("a >> 2 : %d\n", a >> 2);
    printf("b >> 2 : %d\n", b >> 2);
    printf("d << 2 : %d\n", d << 2);

    return(0);
}
      実行結果
a >> 2 : 4
b >> 2 : -4
d << 2 : 16
    (7) ビット代入演算子
内容
a &= b aとbの論理積をaに代入する
a |= b aとbの論理和をaに代入する
a ^= b aとbの排他的論理和をaに代入する
a >>= n aを符号を保ちながらnビット右にシフトしたものをaに代入する
a >>>= n aを0埋めしながらnビット右にシフトしたものをaに代入する
a <<= n aを0埋めしながらnビット左にシフトしたものをaに代入する

/*
    ビット代入演算子
*/

#include <stdio.h>

int main(void)
{
    int a = 1, b = 0, c = 1, d = 0, e = 1, f = 0;
    int g = 8, i = 8;

    a &= b;
    printf("a &= b : %d\n", a);
    c |= d;
    printf("c |= d : %d\n", c);
    e ^= f;
    printf("e ^= f : %d\n", e);
    g >>= 2;
    printf("g >>= 2 : %d\n", g);
    i <<= 2;
    printf("i <<= 2 : %d\n", i);

    return(0);
}
      実行結果
a &= b : 0
c |= d : 1
e ^= f : 1
g >>= 2 : 2
i <<= 2 : 32
トップページへ戻る
Page1 Page2 Page3 Page4 Page5
Copyright© 2005- Naoyuki Sano. All rights reserved.