C++11 整型的算术运算

本文详细介绍了C++11中的整型数据除法与取余运算规则,包括正负数之间的运算特点及结果的取整方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 简介

本文主要介绍在C++11中关于整型数据的取余与除法运算的内容。

  • 除法运算

在C++11中,两个整数相除的结果仍然是整数(除数不能为0),整数相除会舍弃小数部分,例如:

[cpp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. int val = 21 / 6  //得到的val = 3  
在整数除法中,当被除数和除数符号相反时,得到的结果是负数,当两者的符号相同时,得到的结果是整数,如:

[cpp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. int a = 8 / 3;  // 2  
  2. int b = 8 / -3;  // -2  
  3. int c  = -8 / 3;  // -2  
  4. int d = -8/-3;  // 2  

在除法计算中,c++11规定计算的结果都向0取整,也就是说得到的结果直接切除小数部分,不管商是整数还是负数,如:

8 / -3 = -2.6666...,得到的结果就直接去掉小数部分,也就是结果为2。

  • 取余运算

取余运算又称取模运算,计算两个整型相除得到的余数,参与取模运算的两个操作数必须都是整型

[cpp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. int a = 8 %3.5;  // 编译出错  
在C++11标准中,m%n的值与m的符号相同,也就是说m%n = m%(-n),(-m)%n = -(m%n),例如:

[cpp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. int a = 8 %3; // 2(结果与8符号一致)  
  2. int b = 8 % -3;  // 2(结果与8符号一致)  
  3. int c  = -8 % 3;  // -2(结果与-8符号一致)  
  4. int d = -8%-3;  // -2(结果与-8符号一致)  
### C++ 整数运算概述 C++ 提供了多种用于整数运算的操作符,这些操作符可以执行基本的算术运算、位运算以及比较运算。其中最常用的包括加法 `+`、减法 `-`、乘法 `*` 和除法 `/` 运算符。 #### 基本算术运算示例 下面是一个简单的例子,展示了如何利用 C++ 执行基础的四则运算: ```cpp #include <iostream> int main() { int a = 10; int b = 3; std::cout << "a + b = " << a + b << "\n"; // 加法 std::cout << "a - b = " << a - b << "\n"; // 减法 std::cout << "a * b = " << a * b << "\n"; // 乘法 std::cout << "a / b = " << a / b << "\n"; // 整数除法, 结果为商的整数部分[^1] return 0; } ``` 此代码片段中,变量 `a` 和 `b` 都被声明为整型 (`int`) 并初始化为其对应的值。通过使用不同的运算符组合这两个变量来进行四种基本类型的数学计算,并打印出每种情况下的结果。 #### 求余运算的应用 除了常规的四则运算外,求余 `%` 运算也是十分有用的工具之一,在很多场景下都有广泛用途,比如判断奇偶性或是实现循环队列等功能。这里给出一段简单代码展示求余运算的效果: ```cpp #include <iostream> using namespace std; void checkEvenOrOdd(int num){ if(num % 2 == 0) cout<<num<<" is even."<<endl; else cout<<num<<" is odd."<<endl; } int main(){ int number=7; checkEvenOrOdd(number); return 0; } ``` 当输入数字不是2的倍数时,则该函数会输出它是奇数;反之则是偶数[^2]。 #### 复杂应用——单次出现的数字问题解决方法 更进一步地考虑实际应用场景中的复杂度更高的案例,例如在一个数组中有多个重复三次以上的元素而只有一个单独存在的元素的情况下找到这个唯一不重复的元素。此时可以通过巧妙运用按位与(`&`)和移位(`>>`, `<<`)等位运算技巧来解决问题。具体做法如下所示: ```cpp class Solution { public: int singleNumber(std::vector<int>& nums) { int ans = 0; for (int i = 0; i < 32; ++i) { int sum_of_bits_at_i_position = 0; for(auto elem : nums){ sum_of_bits_at_i_position += ((elem >> i) & 1); } if(sum_of_bits_at_i_position % 3 != 0){ ans |= (1 << i); } } return ans; } }; ``` 这段代码实现了对给定列表内所有整数按照每位二进制位分别计数并最终确定那个仅出现过一次的那个特殊数值的过程[^3]。 #### 关于大数模幂运算的支持 最后值得一提的是,在某些情况下可能会遇到非常大的整数参与运算的需求,这时就需要特别注意选择合适的数据类型以防止溢出等问题的发生。特别是在涉及到模幂运算是尤为如此,因为这通常意味着要处理极其庞大的中间产物。因此建议采用无符号长整形(`unsigned long long`),甚至必要时候引入专门的大整数类库来辅助完成此类任务[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值