相关疑难解决方法(0)

一个函数应该只有一个return语句吗?

是否有充分的理由说明为什么在函数中只有一个return语句是更好的做法?

或者,一旦逻辑正确就可以从函数返回,这意味着函数中可能有很多返回语句?

language-agnostic coding-style

781
推荐指数
28
解决办法
23万
查看次数

带负数的模运算

在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.我每次都期待一个积极的结果.模数可以为负数吗?任何人都可以解释这种行为吗?

c gcc modulo

172
推荐指数
8
解决办法
18万
查看次数

具有负值的模运算符

为什么这样的操作:

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)

c++

156
推荐指数
3
解决办法
13万
查看次数

33
推荐指数
3
解决办法
3万
查看次数

ANSI C或ISO C是否指定-5%10应该是什么?

我似乎记得ANSI C没有指定当模运算符的操作数为负时应该返回什么值(只是它应该是一致的).它是否稍后被指定,或者是否总是被指定并且我记得不正确?

c c99 modulo c89

19
推荐指数
1
解决办法
2282
查看次数

正参数的 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)

有人告诉我,ab会一直在路上...阳性

嗯?if(i<0)?

论点是,

模运算的结果是一个等价类,可以选择该类的任何成员作为代表

并且只是作为事后的想法

...; 然而,通常的代表是最小的正余数,属于该类的最小非负整数,即欧几里德除法的余数。然而,其他约定也是可能的。

这意味着6 % 7可以返回6(到目前为止很好),但也可以返回-1. 嗯……真的吗?(让我们忽略所呈现的实现无法处理所有情况的事实。)

我知道模运算就是这样在数学上是正确的。但是后来有人告诉我,C%实际上“没有实现模运算符,而是实现了余数”。

那么,C 是如何定义%运算符的呢?

在 C-Draft 我只找到

/ 运算符的结果是第一个操作数除以第二个操作数的商;% 运算符的结果是余数。在这两个操作中,如果第二个操作数的值为零,则行为未定义。

这是否意味着,6 % 7总是这样6?或者也可以-1

c division modulo integer-division

4
推荐指数
1
解决办法
314
查看次数

否定INT_MIN是否为不确定行为?

假设我有一个i来自外部来源的变量:

int i = get_i();
Run Code Online (Sandbox Code Playgroud)

假设iINT_MIN和的补码表示形式,是-i不确定的吗?

c c99 c89 undefined-behavior

3
推荐指数
2
解决办法
714
查看次数