*、/ 和 % 的定义如何保证 a/b * b + a%b == a
How do the definitions of *, / and % guarantee that a/b * b + a%b == a?
根据Straustrup在PPP中的说法,这是正确的,第68页。
使用代数我可以将其简化为
a/b * b + a%b == a
a + a%b == a, // b in numerator and denominator cancel each other
但这仍然不能解释证据。
对于每两个整数a
和b
你有方程
a = n * b + r;
其中n
是a
可以被b
整除的次数,r
是余数。
例如,如果a
等于25
,b
等于6
那么你可以写
a = 4 * 6 + 1
n b r
使用 C++ 的运算符,您可以像
a = a / b * b + a % b
n r
您省略了a
和b
是整数的事实。
具有两个整数的运算符/
将执行整数除法并丢弃余数。余数可以用运算符%
计算。换句话说,表达a/b
表示b
可以作为一个整体容纳多少次。并a%b
执行该操作后a
会剩下什么。表达式的结果a - (a % b)
不会留下任何余数被除以b
。所以(a / b) * b
等于a - (a % b)
,这给了我们以下表达式(a / b) * b == a - (a % b)
相关文章:
- 与互斥锁相比,旋转锁可以保证上下文切换
- 函数何时会在c++中包含stack_Unwind_Resume调用
- Python中的for循环与C++有何不同
- 原子读取是否保证读取最新值
- C++:当所有条目都保证是唯一时,替代 std::map
- '[](std::list& list)<int>{return std::move(list)}(list)' 是否保证将 'list' 留空?
- "std::list::splice(std::const_iterator pos, std::list&& other)"是否保证将"其他"留空?
- 在C++中释放内存期间,迭代器与指针有何不同
- C++默认情况下,指针类型数组的元素是否保证初始化为 nullptr?
- C++ 11 中的锁定是否保证访问数据的新鲜度?
- C++std::atomic在程序员级别保证了什么
- CUDA三角函数中的数学保证
- 标准是否保证无捕获的 lambda 为空?
- 是否可以保证按字节的零 int 是零的表示形式?
- 有没有办法保证析构函数的相对顺序?
- 单行函数模板 c++ 的内联性保证
- C++易失性:保证 32 位访问?
- 迭代器在递增和递减时是否保证会变异?
- 标准对此指向成员函数类型模板参数有何说明?是我的代码有误,还是 MSVS 16.6 有问题?
- std::元组分配和复制/移动异常保证