是否有充分的理由说明为什么在函数中只有一个return语句是更好的做法?
或者,一旦逻辑正确就可以从函数返回,这意味着函数中可能有很多返回语句?
在ac程序中我正在尝试以下操作(只是检查行为)
x = 5 % (-3);
y = (-5) % (3);
z = (-5) % (-3);
printf("%d ,%d ,%d", x, y, z);
Run Code Online (Sandbox Code Playgroud)
给我输出为(2, -2 , -2)gcc.我每次都期待一个积极的结果.模数可以为负数吗?任何人都可以解释这种行为吗?
为什么这样的操作:
std::cout << (-7 % 3) << std::endl;
std::cout << (7 % -3) << std::endl;
Run Code Online (Sandbox Code Playgroud)
给出不同的结果?
-1
1
Run Code Online (Sandbox Code Playgroud) 我似乎记得ANSI C没有指定当模运算符的操作数为负时应该返回什么值(只是它应该是一致的).它是否稍后被指定,或者是否总是被指定并且我记得不正确?
我在我应该修复的程序中发现了一个函数,该mod函数定义了一个函数:
int mod(int a, int b)
{
int i = a%b;
if(i<0) i+=b;
return i;
}
Run Code Online (Sandbox Code Playgroud)
有人告诉我,a并b会一直在路上...阳性
嗯?if(i<0)?
论点是,那
模运算的结果是一个等价类,可以选择该类的任何成员作为代表
并且只是作为事后的想法
...; 然而,通常的代表是最小的正余数,属于该类的最小非负整数,即欧几里德除法的余数。然而,其他约定也是可能的。
这意味着6 % 7可以返回6(到目前为止很好),但也可以返回-1. 嗯……真的吗?(让我们忽略所呈现的实现无法处理所有情况的事实。)
我知道模运算就是这样在数学上是正确的。但是后来有人告诉我,C%实际上“没有实现模运算符,而是实现了余数”。
那么,C 是如何定义%运算符的呢?
在 C-Draft 我只找到
/ 运算符的结果是第一个操作数除以第二个操作数的商;% 运算符的结果是余数。在这两个操作中,如果第二个操作数的值为零,则行为未定义。
这是否意味着,6 % 7总是这样6?或者也可以-1?
假设我有一个i来自外部来源的变量:
int i = get_i();
Run Code Online (Sandbox Code Playgroud)
假设i是INT_MIN和的补码表示形式,是-i不确定的吗?
c ×4
modulo ×3
c++ ×2
c89 ×2
c99 ×2
coding-style ×1
division ×1
evaluation ×1
gcc ×1
if-statement ×1