我的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)
既然我知道我没有除以零,那还有什么可能导致异常呢?
例如下面的代码
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++.
我从这个网站了解拉宾-卡普算法: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) 如果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) 请解释以下原因,数学上正确的答案是-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 ++ 中-26 % 10输出-6?
如何获得将输出的标准模数4?
注意:这个问题可能是一个重复这一个,或许多人,但我还没有找到一个在很短的方式制定,在眨眼可以理解的。正如我个人喜欢查找简短问题/简短回答(针对简单问题)一样,我认为这可能会引起其他人的兴趣。稍后我将删除此通知。
有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)
为什么会这样,有人可以解释一下,谢谢!