标签: integer-overflow

这个表达式有效吗?

我遇到了这段代码:

std::string str;
std::getline(std::cin, str);
std::string sub = str.substr(str.find('.') + 1);
Run Code Online (Sandbox Code Playgroud)

第一反应是 - 这是无效的代码.但经过一些想法似乎并不那么简单.那么它是有效的C++表达式(具有可预测的行为)吗?

PS如果不是那么清楚问题主要与'.'时会发生什么有关.不会被发现str,但不限于此,因为可能存在其他问题.

c++ string integer-overflow

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

为什么有时我会溢出,有时不会在 C 中

我有这个代码,这两个计算给了我不同的结果。
第一个溢出,第二个只保留 2^31-1。

我不明白为什么。

int n4, n5;

n4 = pow(2, 31);
n4 = n4 + n4;
n5 = pow(2, 31) + pow(2, 31);

printf("\nn4: %d, n5: %d",n4,n5);
/* n4: -2, n5: 2147483647 */
Run Code Online (Sandbox Code Playgroud)

c integer-overflow

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

Go允许算术运算溢出而不是抛出异常是预期的行为吗?

我正在将一些Go代码移植到Rust,我意识到在乘法过程中发生溢出时Rust会慌乱,而Go允许溢出发生。

下面的测试代码不会引起溢出,但是会打印出减少的值。(通过以下网址测试:https : //play.golang.org/

func main() {
    fmt.Println("test\n")
    var key uint64 = 15000;

    key = key*2862933555777941757 + 1

    fmt.Println(key)
}
Run Code Online (Sandbox Code Playgroud)

integer-overflow go

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

下标运算符中不会发生无符号下溢,为什么?

我一直认为下一个例子是未定义的行为(访问数组越界):

int main()
{
    int* a= new int[3];
    a[0] = 100;
    a++;
    
    unsigned long index = 0;
    
    printf("%d\n", a[-1]);
    printf("%d\n", a[index - 1]);
    printf("%ul\n", index - 1);
}
Run Code Online (Sandbox Code Playgroud)

然而,这个输出很好:

100
100
4294967295l
Run Code Online (Sandbox Code Playgroud)

为什么下标运算符不会发生下溢?

c++ integer-overflow

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

整数溢出会影响其他变量吗?

#include <iostream>
using namespace std;

int main() {
    unsigned char char_values[2] = {0, 255};
    char_values[1] += 1;
    cout << (int)char_values[0] << endl;
    cout << (int)char_values[1] << endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在这段代码中,我预计:

1
0
Run Code Online (Sandbox Code Playgroud)

因为十进制中的255是二进制中的1111 1111而十进制中的255 + 1是二进制中的1 0000 0000.所以我认为因为溢出char[0]会受到影响,char[1]但结果是:

0
0
Run Code Online (Sandbox Code Playgroud)

溢出会影响其他变量吗?

c++ integer-overflow

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

为什么 GCC 不检测变量初始化溢出?

为什么编译没有错误呢?我究竟做错了什么?

#include <stdio.h>

int main (){
    int n1 = 90, n2 = 93, n3 = 95;
    int i = 2147483647;
    int ii = 2147483646;
    int iii = 2147483650;
    char c1[50] = {'\0'};
    char c2[50] = {'\0'};
    char c3[50] = {'\0'};

    n1 = sprintf(c1, "%d", i+i);
    n2 = sprintf(c2, "%d", ii);
    n3 = sprintf(c3, "%d", iii);
    printf("n1 = %d, n2 = %d, n3 = %d\n  i = |%s| \n ii = |%s|\niii = |%s|\n", n1, n2, n3, c1, c2, c3);
        return …
Run Code Online (Sandbox Code Playgroud)

c initialization integer-overflow

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

标签 统计

integer-overflow ×6

c++ ×3

c ×2

go ×1

initialization ×1

string ×1