【发布时间】:2011-06-07 14:16:37
【问题描述】:
当我像这样在 C 中将两个无符号字符相乘时:
unsigned char a = 200;
unsigned char b = 200;
unsigned char c = a * b;
然后我知道我会溢出,结果我得到 (40'000 modulo 256)。当我这样做时:
unsigned char a = 200;
unsigned char b = 200;
unsigned int c = (int)a * (int)b;
我会得到正确的结果 40'000。但是,我不知道这会发生什么:
unsigned char a = 200;
unsigned char b = 200;
unsigned int c = a * b;
我可以确定正确的事情发生了吗?这个编译器依赖吗?同样,我不知道做减法时会发生什么:
unsigned char a = 1;
unsigned char b = 2;
int c = a - b;
当使“c”成为无符号字符时,我可能会得到 255。当我使用这样的 int 时会发生什么?
【问题讨论】:
标签: c casting char overflow int