在写程序时遇到这样一个问题
int main()
{
unsigned int u = 10;
int b = -34;
cout << b%u << endl;//结果为2
b = 34;
cout << b%u << endl;//结果为4
system("pause");
}
按正常逻辑,第一个是-4,第二个是4,但是显然结果有问题,导致这种问题的原因是取余的两个操作数类型不一样,这种情况下,会把有符号数int型转换为无符号数unsigned int型进行运算。
解决办法统一两个操作数类型
int main()
{
int u = 10;
int b = -34;
cout << b%u << endl;
b = 34;
cout << b%u << endl;
system("pause");
}
int main()
{
unsigned int u = 10;
int b = -34;
cout << b%(int)u << endl;
b = 34;
cout << b%u << endl;
system("pause");
}
这两种办法都可以
注:取余运算时,如果两个操作数类型一致,结果和被除数的符号一致
如下所示
21 % 6; /* result is 3 */ 求余看被除数的符号,不看除数
21 % 7; /* result is 0 */
-21 % -8; /* result is -5 */
21 % -5; /* result is 1 */
21 / 6; /* result is 3 */ 求整两边都看
21 / 7; /* result is 3 */
-21 / -8; /* result is 2 */
21 / -5; /* result is -4 */