不同类型的除数和被除数取余 C++

在写程序时遇到这样一个问题

int main()
{unsigned int u = 10;int b = -34;cout << b%u << endl;//结果为2b = 34;cout << b%u << endl;//结果为4system("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 */
 


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部