C ++模数运算符理解

时间:2015-11-22 04:57:17

标签: c++

我刚刚开始编程和通过C ++编程原理和实践阅读。我目前正在进行第3章练习,并且不明白为什么我编写的代码有效。请帮忙解释一下。

#include "std_lib_facilities.h"

int main() {
  cout<<"Hello, User\n""Please enter a number (Followed by the 'Enter'     key):";
  int number=0;
  cin>> number;
  if (number%2) {
    cout<<"Your number is an odd number!";
  } else {
    cout<<"Your number is an even number\n";
  }
  return 0;
}

4 个答案:

答案 0 :(得分:2)

number为奇数时,number%21

if (number%2) {

相当于

if (1) {

因此,您可以从行

获得输出
cout<<"Your number is an odd number!";

number为偶数时,number%20

if (number%2) {

相当于

if (0) {

因此,您可以从行

获得输出
cout<<"Your number is an even number\n";

答案 1 :(得分:0)

模数运算符只是确定相应除法问题的其余部分。例如,2 % 2返回 0 ,因为2 / 2为1,余数为 0

在您的代码中,输入的任何偶数都将返回0,因为根据定义,所有偶数都可以被2整除(意味着<any even number> % 2 == 0

同样,输入的任何奇数都将返回1(例如,7 % 2 == 1,因为7/2的余数为1)。

在c ++中,与许多编程语言一样,数字值可以被视为布尔值,0表示与false相关,而其他数字(取决于语言)与true相关(据我所知,1是普遍正确的对编程语言很重要。)

换句话说,奇数输入会将number % 2评估为1,表示正确。所以if (number % 2),我们知道输入数字是奇数。否则,number % 2必须为false,表示0,表示输入数字为偶数。

答案 2 :(得分:0)

“if”语句适用于布尔值。让我们记住,布尔值由“false”和“true”表示,但实际上,它都是关于包含{0,1}的Z2的二进制集。 “false”表示“0”,“true”表示“1”(或电子设备中的某些人将其解释为“off / on”)

所以,是的,在窗帘后面,“if”语句正在寻找0或1.模数运算符返回a / b的其余部分。当你输入任何数字并将其除以2时,你将获得0或1的余数,无论是对还是奇数。

这就是它工作的原因,你总是得到0或1的结果,这样做是错误和真实的。

答案 3 :(得分:0)

从这个角度考虑模数: while(整数A大于整数B,) A = A - B; 返回A

例如,9%2 - > 9-2 = 7-2 = 5-2 = 3-2 = 1 9%2 = 1;

语句if(number%2)是所谓的布尔比较(true false)。另外一种写这个语句的方法是if(number%2!= 0)或if(number%2!= false),因为false和zero是模棱两可的。您将获取模数运算符函数的返回值(我们假设的模板对象是一个整数)并将其插入到if语句中,如果输入不等于零则执行该语句。如果输入是-5,9999999,1,则执行语句 - 除零之外的任何内容。所以,如果(2)是真的。如果(-5)也是如此。 if(0)将为false。如果(5%2)是1 =真。 if(4%2)if if(0)= false。如果为true,则执行if语句正文中的代码。