これ参考になりますか。
コード:
#include <stdio.h>
int main(int , char*[]) {
double x = 0;
x = 1/5;
printf("%lf\n", x); // 整数で除算
x = 1.0/5.0;
printf("%lf\n", x); // 浮動小数で除算
unsigned char c = x;
printf("%d\n", c); // unsigned char
}
VS2015のcl.exeでの結果です。
コード:
C:\Users\guest\Documents>cl /W3 1.cpp
Microsoft(R) C/C++ Optimizing Compiler Version 19.00.24210 for x86
Copyright (C) Microsoft Corporation. All rights reserved.
1.cpp
1.cpp(11): warning C4244: '初期化中': 'double' から 'unsigned char' への変換です。データが失われる可能性があります。
Microsoft (R) Incremental Linker Version 14.00.24210.0
Copyright (C) Microsoft Corporation. All rights reserved.
/out:1.exe
1.obj
C:\Users\guest\Documents>1
0.000000
0.200000
0
C:\Users\guest\Documents>
警告オプション /W3 を指定すると、unsigned charに格納する箇所で警告が出ます。
指定しないと警告が出ません。
また整数型の除算は商が入るんですね。
計算の結果、型の違いがあっても警告は出ないみたいです。
参考になるかもしれないページ→
キャスト演算子