個人的なメモ

めもめも.

キャストメモ

キャストとは、「明示的に型を指定して型変換を行う」こと
#include <stdio.h>

int main(){

  signed   char c;
  unsigned char uc;
  signed   char *pc  = NULL;
  unsigned char *puc = NULL;

  c = -1;
  uc = (unsigned char)c;

  printf("%d %d\n", c, uc); // -1 255

  c = (signed char)uc;
  printf("%d %d\n", c, uc); // -1 255
  // キャストして代入してもビット列は変わらない
  // 最上位ビットを符号として扱うかどうか

  pc = &c;
  puc = (unsigned char*)pc;
  // アドレスの代入だが、ポインタ変数の型が異なるので、
  // キャスト(明示的な型変換)しないとWarningで怒られる
  printf("%d %d\n", *pc, *puc); // -1 255
  // ポインタでも同じ

  printf("%d %d\n", (unsigned char)*pc, (char)*puc); // 255 -1
  // ポインタ変数が指している値のキャスト
  printf("%d %d\n", *(unsigned char*)pc, *(char*)puc); // 255 -1
  // ポインタ変数のキャスト

  return 0;
}