第16問

カラーコードを表示するプログラムを作りました。期待どおりに動作しましたが、一部の環境では同じ表示にならないかもしれません。

どのように修正すれば環境への依存性を低くできるか、分かりますか?
main.c
#include <stdlib.h>
#include <stdio.h>

unsigned int MakeColor(unsigned char nRed, unsigned char nGreen, unsigned char nBlue) {
  unsigned int r = (unsigned int)nRed << 16;
  unsigned int g = (unsigned int)nGreen << 8;
  unsigned int b = (unsigned int)nBlue;

  return r | g | b;
}

int main(void) {
  printf("red = #%06x\n", MakeColor(255, 0, 0));
  printf("blue = #%06x\n", MakeColor(0, 0, 255));
  printf("magenta = #%06x\n", MakeColor(255, 0, 255));

  return EXIT_SUCCESS;
}
期待される実行結果
red = #ff0000
blue = #0000ff
magenta = #ff00ff
カラーコードっていうのは分かるかしら?
はい。HTMLとかCSSで使うやつですよね。「黄色」は「#ffff00」とかの。
そうそう。そのカラーコードを「赤・緑・青」の三原色から計算するプログラムね。
三原色はそれぞれ0〜255の範囲で指定するから、unsigned charなんですね。
そういうこと。
で、計算した結果がunsigned intになる、と。
だいたいの場合はこれで問題ないのだけれど。
一部の環境ではちゃんと動かないんですね。でも、なんで……。
期待どおりの計算が成立するための前提条件を考えてみましょう。