我有两个有符号的整数,我想减去它们.我需要知道它是否溢出.
int one;
int two;
int result = two-one;
if (OVERFLOW) {
printf("overflow");
} else {
printf("no overflow");
}
Run Code Online (Sandbox Code Playgroud)
这样的事情.有没有办法做到这一点?
我用g ++ -Wall编译这段代码,得到没有警告/错误:
#include "stdio.h"
int main() {
long x = 1000000000000;
int y = x;
printf("%ld %d\n", x, y);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出是人们所期望的:
1000000000000 -727379968
Run Code Online (Sandbox Code Playgroud)
但在这种情况下,编译器是否应该阻止隐式转换/截断?
g++ (GCC) 4.1.2 20071124 (Red Hat 4.1.2-42)
Run Code Online (Sandbox Code Playgroud) 在C++中如果我这样做:
__int64 var = LLONG_MIN;
__int64 var2 = -var;
cout << "var: "<< var << endl;
cout << "var2: "<< var2 << endl;
Run Code Online (Sandbox Code Playgroud)
我得到的输出是:
var: -9223372036854775808
var2: -9223372036854775808
Run Code Online (Sandbox Code Playgroud)
涵盖此标准的标准部分是什么?我假设它是有符号整数溢出.这是使用g ++(GCC)4.7.2编译的.
我有一个减法函数,我正在写一个添加函数,我想我可以这样做:
add( someobj &obj, long long num ) { subtract( obj, -num ); }.我认为如果不是LLONG_MIN那会有用.
我试图理解算术溢出.假设我有以下,
unsigned long long x;
unsigned int y, z;
x = y*z;
Run Code Online (Sandbox Code Playgroud)
y*z可能导致整数溢出.将其中一个操作数强制转换为unsigned long long可以缓解此问题.64位操作数与32位操作数相乘的预期结果是什么?
我刚刚开始自学C++,并开始学习整数溢出.出于好奇,我写了一些测试,只是为了看看某些整数值会发生什么.
这是我的计划:
#include <iostream>
int main()
{
int x(0);
std::cout << x << std::endl;
x = x + 2147483647;
std::cout << x << std::endl;
x = x + 1;
std::cout << x << std::endl;
std::cout << std::endl;
unsigned int y(0);
std::cout << y << std::endl;
y = y + 4294967295;
std::cout << y << std::endl;
y = y + 1;
std::cout << y << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
这是输出:
0
2147483647
-2147483648
0
4294967295
0
Run Code Online (Sandbox Code Playgroud)
输出让我感到有些惊讶,我想知道是否有人可以解释为什么会发生这种情况,或者如果这些结果出乎意料的话,这是预期的; 所以这可能只是我特定机器的结果.
我试图以百分比表示电池电压.我的电池电量是mV的(全局)uint16.我有一个16位CPU.这是我的代码:
static uint8 convertBattery(void){
uint16 const fullBattery = 3000; /* 3V = 3000mV */
uint8 charge;
charge = ((battery*100)/fullBattery);
return charge;
}
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,我已经通过将分子乘以100得到了整数除法.
使用battery = 2756我的充电值计算出04意外的值.我花了很多时间在这个相当微不足道的任务上并没有取得任何进展.有人能说出问题出在哪里吗?
谢谢.
我是CUDA的新手,我一直致力于"减少算法".
该算法适用于任何小于1 << 24的数组大小.
当我使用大小为1 << 25的数组时,程序在"总和"中返回0,这是错误的.总和应该是2 ^ 25
编辑 cuda-memcheck compiled_code
========= CUDA-MEMCHECK
@@STARTING@@
========= Program hit cudaErrorInvalidValue (error 11) due to "invalid argument" on CUDA API call to cudaLaunch.
========= Saved host backtrace up to driver entry point at error
========= Host Frame:/usr/lib64/libcuda.so.1 [0x2f2d83]
========= Host Frame:test [0x3b37e]
========= Host Frame:test [0x2b71]
========= Host Frame:test [0x2a18]
========= Host Frame:test [0x2a4c]
========= Host Frame:test [0x2600]
========= Host Frame:test [0x2904]
========= Host Frame:/lib64/libc.so.6 (__libc_start_main + 0xfd) [0x1ed5d]
========= Host Frame:test …Run Code Online (Sandbox Code Playgroud) 我的印象是.checked_*(_)积分类型的方法有助于避免溢出.然而,该.checked_shl(u32)方法愉快地移出了上面示例的最后一点.
我的印象错了吗?那个方法是什么?
(还想添加它以避免轮班溢出,可以检查是否((~0) >> rhs) >= self至少对于无符号类型)
我正在构建一个ASP.NET Core API,它返回太阳系中的周期表和行星.主要是使用API调用,以及.NET中的数据类型.在Visual Studio 2017中构建它.
我在行星的质量属性方面存在问题,以千克为单位.显然是一个大整数,所以我尝试将它声明为long,Ulong,Int64甚至UInt64.但是,当我尝试进入一个行星的新模型并放入质量时,我收到以下错误:
struct System.Int32
Represents a 32 bit signed integer.
Integral constant is too large.
Run Code Online (Sandbox Code Playgroud)
这是我正在描述属性的PlanetModel.cs:
...
public UInt64 Volume { get; set; } //In Kilometers
public Int64 Mass { get; set; } //In Kilograms
public float Gravity { get; set; } //In m/s^2
...
Run Code Online (Sandbox Code Playgroud)
然而,当我转移到我的PlanetDataStore.cs时,我正在尝试使用数据构建对象.
new PlanetModel()
{
Position = 1,
Name = "Mercury",
Distance = 57909050, //In Kilometers
Orbit = 0.240846F, //In years
SolarDay = 0.5F, //In Days
Radius = 2439, //In Kilometers
Volume …Run Code Online (Sandbox Code Playgroud) 请检查以下代码段:
unsigned char a = 100;
unsigned char b = 100;
unsigned char c = 100;
unsigned short x = a * b + c;
Run Code Online (Sandbox Code Playgroud)
我预计这会溢出,计算将在8位类型的unsigned char(不是16位无符号short)中完成,超过unsigned char的值范围.但事实并非如此.
为什么计算不会在C和C++中溢出?
integer-overflow ×10
c++ ×6
c ×4
arrays ×1
asp.net ×1
c# ×1
cuda ×1
g++ ×1
integer ×1
long-integer ×1
long-long ×1
overflow ×1
percentage ×1
rust ×1
signed ×1