刷算法题时遇到的那道题用了unsigned long long,同时还又用了三目运算符判断是否满足条件不满足条件输出-1三目运算符 (condition ? expr1 : expr2) 有一个重要的规则expr1 和 expr2 必须具有相同的类型。如果类型不同编译器会进行隐式类型转换。unsignedinta100;// 假设 a 是 100不等于 88autoresult(a88?a:-1);当 a ! 88 时选择 -1 这个表达式但a 是 unsigned int 类型-1 是 int 类型编译器需要统一这两个表达式的类型根据算术转换规则int 会被转换为 unsigned int。转换结果当 -1 被转换为 unsigned int 时在二进制层面-1 的补码表示是 11111111 11111111 11111111 11111111作为 unsigned int 解释时这个值变成 4294967295在32位系统上验证代码#includeiostreamintmain(){unsignedinta100;autoresult(a88?a:-1);std::coutresult resultstd::endl;// 输出 4294967295std::couttype of result typeid(result).name()std::endl;// 显示 unsigned int}