相关疑难解决方法(0)

gdb中的算术异常,但我没有除以零?

我的Floating point exception (core dumped)C++程序中出现错误,gdb显示问题出在执行模数除法的行上:

Program received signal SIGFPE, Arithmetic exception.
[Switching to Thread 0x7ffff6804700 (LWP 13931)]
0x00000000004023e8 in CompExp::eval (this=0x7fffec000e40, currVal=0)
    at exp.cpp:55
55              return (r==0) ? 0 : l % r;
Run Code Online (Sandbox Code Playgroud)

该线防止零除,我的回溯显示以下内容:

#0  0x00000000004023e8 in CompExp::eval (this=0x7fffec000e40, currVal=0)
    at exp.cpp:55
        l = -2147483648
        r = -1
Run Code Online (Sandbox Code Playgroud)

既然我知道我没有除以零,那还有什么可能导致异常呢?

c++ gdb exception arithmeticexception

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

对int类型和无符号整数的值应用模运算

例如下面的代码

int a = -7777;
int b = 10;
cout<< a % b<<endl;
cout<<(a+b)%b<<endl;
cout<< -7777%10 <<endl;
Run Code Online (Sandbox Code Playgroud)

结果是:

-7
-7
-7
Run Code Online (Sandbox Code Playgroud)

但如果我将b的类型更改为unsigned int,则它具有不同的值;

int a = -7777;
unsigned int b = 10;
cout<< a % b<<endl;
cout<<(a+b)%b<<endl;
cout<< -7777%10 <<endl;
Run Code Online (Sandbox Code Playgroud)

结果是

9
9
-7
Run Code Online (Sandbox Code Playgroud)

有人可以建议它是如何在这里工作的吗?差异是如何产生的?

顺便说一句:我在Xcode最新版本中使用C++.

c++ int unsigned-integer

5
推荐指数
1
解决办法
837
查看次数

Rabin-Karp 算法代码中的负哈希值

我从这个网站了解拉宾-卡普算法:https://www.geeksforgeeks.org/rabin-karp-algorithm-for-pattern-searching/

他们的算法的 C++ 代码如下:

#include <bits/stdc++.h> 
using namespace std; 
  
// d is the number of characters in the input alphabet  
#define d 256  
  
/* pat -> pattern  
    txt -> text  
    q -> A prime number  
*/
void search(char pat[], char txt[], int q)  
{  
    int M = strlen(pat);  
    int N = strlen(txt);  
    int i, j;  
    int p = 0; // hash value for pattern  
    int t = 0; // hash value for txt  
    int h = 1;  
  
    // The …
Run Code Online (Sandbox Code Playgroud)

c++ algorithm hash data-structures

5
推荐指数
1
解决办法
253
查看次数

C/C++中的实模运算符?

可能重复:
如何编写处理负数的C/C++/Obj-C中的模数(%)运算符

根据我的理解(参见具有负值模运算的模运算符)C&C++有一个"余数"运算符,a % b但是当LHS为负时,没有实际执行模运算的运算符.

有几种语言确实有这样的功能.是否有可能在C/C++中构建一个高效的函数(或者在i686/x64 CPU上没有有效的方法)?

目前我使用的(n * b + a) % b地方n是,我相当确定整个LHS是非负的,但不可避免地会改变代码并且有时会发生错误.

注意:如果不清楚,通过模运算我的意思是一个运算符,a + b % b = a % b对于所有整数a和所有正整数b.

c c++ modulo

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

从'int'转换为'unsigned char'可能会改变其值

如果gcc -Wconversion没有显式(=丑陋)强制转换,您将如何删除以下代码生成的警告:

int main()
{
  int val;
  unsigned char c1 = (val % 65536) / 256;
  unsigned char c2 = (val % 65536) % 256;
}
Run Code Online (Sandbox Code Playgroud)

有没有办法告诉编译器显然演员是在(% 65536) / 256或期间隐含地完成的% 256

以供参考

$ gcc -Wconversion w.c
w.c: In function ‘main’:
w.c:4:36: warning: conversion to ‘unsigned char’ from ‘int’ may alter its value [-Wconversion]
w.c:5:36: warning: conversion to ‘unsigned char’ from ‘int’ may alter its value [-Wconversion]
Run Code Online (Sandbox Code Playgroud)

c gcc casting

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

为什么7%-5给出2但-7%5给-2?这两种情况都不应该是-2吗?

请解释以下原因,数学上正确的答案是-2两种情况:

int a=7%-5; //Assigns 2 to a
int a=-7%5;  //Assigns -2 to a
Run Code Online (Sandbox Code Playgroud)

代码在C中.

c modulo

0
推荐指数
1
解决办法
543
查看次数

C ++中具有负整数的模

为什么在C ++ 中-26 % 10输出-6

如何获得将输出的标准模数4


注意:这个问题可能是一个重复这一个,或许多人,但我还没有找到一个在很短的方式制定,在眨眼可以理解的。正如我个人喜欢查找简短问题/简短回答(针对简单问题)一样,我认为这可能会引起其他人的兴趣。稍后我将删除此通知。

c++ modulo

0
推荐指数
1
解决办法
2064
查看次数

当一个是size_t类型而另一个是<0时,为什么mod操作返回0?

有c ++代码:

string s = "abc";
size_t len = s.length();
cout<<(-1%len)<<endl;//print 0
Run Code Online (Sandbox Code Playgroud)

但如果将size_t更改为int:

string s = "abc";
int len = s.length();
cout<<(-1%len)<<endl;//print -1
Run Code Online (Sandbox Code Playgroud)

为什么会这样,有人可以解释一下,谢谢!

c++

-1
推荐指数
1
解决办法
394
查看次数