Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.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中的等效值?_C_Operators_Modulus - Fatal编程技术网

模(数学函数)在C中的等效值?

模(数学函数)在C中的等效值?,c,operators,modulus,C,Operators,Modulus,我有一段代码,我看到一个警告说 我正在对有符号和无符号数字进行比较。 类似int的东西只是把一方抛给另一方。如果将有符号数转换为无符号数,则必须确保无符号数不是负数,否则比较-1 BLA 被签名,所以你不能把它改成 SiZeSt BLA < /Cube >被签名,所以你不能仅仅把它改成 SiZeSt

我有一段代码,我看到一个警告说

我正在对有符号和无符号数字进行比较。

类似int的东西只是把一方抛给另一方。如果将有符号数转换为无符号数,则必须确保无符号数不是负数,否则比较
-1<100
将不会产生期望的结果,因为
(无符号)(-1)==UINT\u MAX
-,或者如果将无符号数转换为有符号数,则无符号数不会溢出。在这些情况下,增加一个额外的条件来治疗他们

对于上述特殊情况,我将使用

assert(num <= (int)(MAX_SIZE/sizeof(int)));
// num <= MAX_SIZE/(int)sizeof(int) if I'm in a mean mood

如果
num
保证为非负。

只需将一方转换为另一方即可。如果将有符号数转换为无符号数,则必须确保无符号数不是负数,否则比较
-1<100
将不会产生期望的结果,因为
(无符号)(-1)==UINT\u MAX
-,或者如果将无符号数转换为有符号数,则无符号数不会溢出。在这些情况下,增加一个额外的条件来治疗他们

对于上述特殊情况,我将使用

assert(num <= (int)(MAX_SIZE/sizeof(int)));
// num <= MAX_SIZE/(int)sizeof(int) if I'm in a mean mood

如果
num
保证为非负。

如果您知道正确的操作数是如果您知道正确的操作数是,正如我所看到的,您的
int num
可以接受任何负值和正值,最大值为
MAX\u SIZE/sizeof(int)
。否则您肯定会将
num
声明为无符号整数

通过这个附加条件扩展断言语句对您的情况有帮助吗

assert( num < 0 || /* make the signed check */
  (unsigned int)num <= MAX_SIZE/sizeof(int) /* the unsigned remainder */
  );
assert(num<0 | |/*进行签名检查*/

(unsigned int)num在我看来,您的
int num
可以接受最大值为
MAX\u SIZE/sizeof(int)
的任何负值和正值。否则您肯定会将
num
声明为无符号整数

通过这个附加条件扩展断言语句对您的情况有帮助吗

assert( num < 0 || /* make the signed check */
  (unsigned int)num <= MAX_SIZE/sizeof(int) /* the unsigned remainder */
  );
assert(num<0 | |/*进行签名检查*/

(无符号整数)num如果你在问题中提到警告和错误,你可能想写下实际的警告,而不是它的大致版本。如果你能让它附带一些相关的代码,那就更好了。在上面添加了原始代码和警告。问题是,
num
可能的预期允许范围是什么拿?与大小相关的表达式让我确实想知道使用模运算符或abs
-函数的目的是什么?如果你在问题中提到警告和错误,你可能想写下实际的警告,而不是它的近似版本。如果你能让它伴随一些相关的代码,那将是be甚至更好。在上面添加了原始代码和警告。问题是,
num
可能采用的预期允许范围是什么?与大小相关的表达式确实让我想知道使用模运算符或
abs
-函数的目标是什么?谢谢!这就引出了我的第一个问题:是否存在模(我们在数学中使用的一个)C中的运算符?是不是?5?=5?你是指“代码> ABS-”/>代码而不是模数吗?把一个带符号的数字转换成一个无符号类型是安全的,但不是相反的。“巴特-是的,是这样的,但是它不是一个C++函数吗?@ MaSi:这也是一个C函数:谢谢!这就引出了我的第一个问题:在C语言中是否有一个模(我们在数学中使用的)运算符?它的|-5 |=5?你是说
abs()
而不是模?将有符号的数字转换为无符号的类型是安全的,但不是相反的。@Bart-是的,没错!类似的东西,但不是abs()C++函数?@ MaSi:也是C函数:OP说“代码> BLA 被签名,所以你不能把它改成<代码> SiZeSt<<代码>(这是无符号的)。OP说:“代码> BLA < /Cube >被签名,所以你不能仅仅把它改成<代码> SiZeSt<<代码>(这是未签名的)。