2012年(158)
分类: C/C++
2012-11-20 10:57:33
因有人问及这个问题,故答之:
a << b 的类型取决于 a
,如果a类型所能表达的最大值小于等于int,则结果是int,否则为a的类型
比如 char << Type 的类型为
int,无论Type是char也好,long long也罢;
比如 unsigned char << Type 的类型为
int,虽然第一操作数为无符号类型,结果仍然是int,而不是unsigned int;
比如 long << Type 的类型为
long,因为按照标准 long 的表达范围 >= int 的表达范围;
比如 unsigned int << Type 的类型为
unsigned
int,因为INT_MAX为2147483647,UINT_MAX为4294967295
右移的类型也同样如此,但右移后其左边是补充0还是补充1,取决于a是否小于0:
无符号数肯定是大于等于0的,右移后其左边肯定补充0
有符号数,且值大于等于0,那么右移后其左边也补充0
有符号数,且值小于0,那么右移后其左边“可能“补充1,之所以用“可能“二字,盖因为标准没有规定,但大部分编译器都这么做。