Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 我是否总是有`(a/b*b)和#x2B;当b不是零时,a%b==a`?_C++_C - Fatal编程技术网

C++ 我是否总是有`(a/b*b)和#x2B;当b不是零时,a%b==a`?

C++ 我是否总是有`(a/b*b)和#x2B;当b不是零时,a%b==a`?,c++,c,C++,C,对于inta,b,我知道当a和b中正好有一个为负值时,a/b和a%b的结果取决于机器。但是当b不是零时,我是否总是有(a/b*b)+a%b==a?C++11§5.6[expr.mul]/4规定: 如果商a/b可表示为结果的类型,(a/b)*b+a%b等于a C11§6.5.5/6规定了相同的内容,但措辞略有不同: 如果商a/b是可表示的,则表达式(a/b)*b+a%b应等于a;否则,a/b和a%b的行为都未定义 你所说的总是有是什么意思?什么类型是a和bIndeed,如果类型是无符号类型,那么当

对于
inta,b
,我知道当
a
b
中正好有一个为负值时,
a/b
a%b
的结果取决于机器。但是当
b
不是零时,我是否总是有
(a/b*b)+a%b==a

C++11§5.6[expr.mul]/4规定:

如果商
a/b
可表示为结果的类型,
(a/b)*b+a%b
等于
a

C11§6.5.5/6规定了相同的内容,但措辞略有不同:

如果商
a/b
是可表示的,则表达式
(a/b)*b+a%b
应等于
a
;否则,
a/b
a%b
的行为都未定义


你所说的
总是有
是什么意思?什么类型是a和bIndeed,如果类型是无符号类型,那么当
b
为非零时,等式始终保持不变。我在哪里可以找到一个演示?请注意,“如果商是可表示的”子句是必不可少的。例如,如果
a==INT_MIN
b==-1
,则等式为false(且行为未定义)。@R..-这适用于两个补码表示,但不适用于符号大小。我不太清楚自己的情况。这三个都是C和C++的有效整数表示。对不起,我的意思是,一般来说是错误的,因为两个补充是可能的。这在实践中也是错误的,因为补码和符号/幅度实现并不存在。