変数(1)

int型(整数型およびchar型(文字型)

      [unsigned] char
      [unsigned] int
      [unsigned] short
      [unsigned] long

[例]  整数型のメモリ幅(サイズ)を調べるプログラム

      #include <stdio.h>
      int main(void)
      {
         printf("char  %d[byte]\n", sizeof(char));
         printf("int   %d[byte]\n", sizeof(int));
	 printf("short %d[byte]\n", sizeof(short));
         printf("long  %d[byte]\n", sizeof(long));
      }


内部表現

      #include <stdio.h>
      int main(void)
      {  
         int i;
         printf("int\tchar\tunsigned char\n");
         for(i=0; i<256; i++) {
            printf("%d\t%d\t%u\n", i, (char)i, (unsigned char)i);
         }
      }

2進数と補数


論理演算とビット演算

0偽(NO, FALSE)
1真(YES, TRUE)
0以外真(YES, TRUE)
int main(void) {
  int i;
  printf("TRUE:  %d\n", 4==4);
  printf("FALSE: %d\n", 4==5);
  for(i=-5; i<5; i++) {
    if(i) printf("%d\tTrue\n", i);
    else  printf("%d\tFalse\n", i);
  }
}

主なビット演算

演算子意味
~反転(not) 0xf8→ 0x07
&論理積(and) 0x0f & 0x11 → 0x01
|論理和(or) 0x0f | 0x11 → 0x1f
^排他的論理和(Ex-or) 0x0f ^ 0x11 → 0x1e
<<左へビットシフト 0x05 << 1 → 0x0a
>>右へビットシフト 0x05 >> 1 → 0x02


除算と剰余

      整数 / 整数
整数型データの割算は余りを切捨て,0に近い整数値に丸める.
      整数 % 整数
剰余演算子(%)は余りを計算する.


char型

      #include <stdio.h>
      int main(void)
      {
         char c;
         for(c='a'; c<='z'; c++) putchar(c);
         putchar('\n');
      }

関数意味
getchar()標準入力より読み込んだ文字を返す(1文字)
putchar(c)標準出力へ1文字(c)を書き出す

[例]
int main(void) {
  int n=0;
  char c;
  while((c=getchar()) != EOF) {
    n++;
    putchar(c);
  }
  printf("読んだ文字数=%d\n", n);
}


演習問題1

  1. 符号付き int, shortおよび, long型で取り扱うことができるデータの最大値を求めなさい.

    [ヒント]

  2. 20から231までの2の冪乗のテーブル(数表)を作りなさい.

    [実行結果の例]

    
      0  1
      1  2
      2  4
      3  8
      ...
     30  1073741824
     31  2147483648
  3. 整数値を読み込み, それを2進数に表現したときのビット列(32ビット)として書き出しなさい.