⑴ 我现在用C语言处理一个数学问题,数据较大,长整型还是溢出,怎么办
定义成long long类型,支持64位的算术计算
定义成double类型,甚至long double类型(未标准化,根据平台的不同,可能是回和答double一样8字节,也可能是12字节,甚至16字节,x86下一般是10字节)
使用任意精度数学库,相关信息可以看wiki网络,关键字尾
Arbitrary precision arithmetic
⑵ c语言整形数据溢出怎么办
C语言的强大之处就在于他的灵活性,程序员自己把握。编译器可以帮助预防错误,版但有些程序会权利用溢出,所以溢出不完全是错误的事情。
1、溢出:
数据类型超过了计算机字长的界限而出现的数据溢出;
2、溢出可能原因:
当应用程序读取用户数据,复制到应用程序开辟的内存缓冲区中,却无法保证缓冲区的空间足够时 (假设定义数组int Array[10], 而在调用时使用Array[11] 或存放的数据超过int类型容量等), 内存缓冲区就可能会溢出.
3、溢出因素分析:
由于C/C++语言所固有的缺陷,既不检查数组边界,又不检查类型可靠性,且用C/C++语言开发的程序由于目标代码非常接近机器内核,因而能够直接访问内存和寄存器,只要合理编码,C/C++应用程序在执行效率上必然优于其它高级语言。然而,C/C++语言导致内存溢出问题的可能性也要大许多。
⑶ C语言中int型溢出怎么办 用unsigned long [ int ]都还是溢出该怎么办 想要存放11位的数字
11位十进制数值 long long应该不会溢出吧。。。
再大的数字。。
就只能用数组或者链表了。。
⑷ 整型数据溢出问题,将int改成long还是溢出。。求解
亲,我先跟你说一下,为什么b的结果会是-32768,因为int 类型的数其范围版是-32768--32767,而系统运算是这样权的(加法运算)-32768->0,0->32767, 32767+1=-32768 (减法运算)32767->0,0->-32768, -32768-1=-32767,亲,你这样能看懂吗?如果不能我就换另一个说法,其实就好比是一个圆,如果0是原点的话(0度),那么32767.5=-32768.5=180度,如果再不懂请你家我扣 2+9+0+9+1+1+8+2+9+3,验证写数据溢出。
⑸ 如何用C语言处理长整形溢出问题各位高手指点指点!!
以加法(溢出一位)情况举例, 判断两个加数的符号和相加结果的符号
1)如果两个加版数符号相反,则断定无溢出权.
2)如果两个加数符号相同且与计算结果同号,也可以断定没有溢出.
3)如果两个加数符号相同且与计算结果相反,则分两种情况
<1>加数的符号为正
相加结果为负数, 说明计算结果中本来最高位为符号位因为溢出置1,这种情况可以用unsigned long * 指针获取计算结果.
比如,
long c = a + b;
if(a > 0 && b > 0 && c < 0)
{
unsigned long * pValue = (unsigned long *)&c;
printf("result = %ul\n", *pValue);
}
<2>如果加数同号为负, 结果为正, 则考虑补码,
结果应该是-(2的33次幂-c)
⑹ long整形的数字怎么会溢出的
溢出,并不是在于将计算结果赋值给t的时候产生的
而是在160*60后再乘以60就溢出了
具体过程回是:一开始,160,系统默认答为一个integer数据,就开辟这样一个空间,每次的运算结果仍在这里,计算完成后才赋值给变量。
解决的办法是:
t = 160& * 60 * 60
一开始就开辟一个long的空间来运算。
⑺ vb中设置长整型为什么还是会溢出
Option Explicit
Dim m&, n&, p&, r&
Private Sub Command1_Click()
m = 322
n = 233
p = gcd(m, n)
r = m * n / p
Label6(0).Caption = p
Label6(1).Caption = r
End Sub
Private Function gcd&(ByVal m&, ByVal n&)
Dim a&, b&
If m < n Then b = m: m = n: n = b
a = m Mod n
Do While (a <> 0)
m = n: n = a: a = m Mod n
Loop
gcd = n
End Function
⑻ VB语言关于long长整型溢出的问题
32*1024=Overflow(溢出)?
●32×1024为什么不是32768而是Overflow(溢出)这个结果?这个问题要从资料形态开始讲起,当我们设定一个变量为整数时,程序会向作业
系统要求2Byte(32bits)来存放资料,其可存放的范围为-32768 ~ +32767(在VB时),当数值超过这个范围时,因内存空间已固定为2Byte,无
法法再增加,在C语言里只取2Byte,而VB会造成溢出现象而停止程序执行。
例如:
Private Sub command1_Click()
Dim A As Integer
A = 32768
End Sub
●结果执行时会溢出
Private Sub command1_Click()
Dim B As Integer
A = -32769
End Sub
●结果执行时会溢出
Private Sub command1_Click()
Dim C As Long
C = 32 * 1024
End Sub
●结果会如何?答案依然是溢出。因为VB在做数值运算时,会先开一个内存地址来存放计算结果,然后在传送到你指定的变量里,如上一个程
序,变量C虽然是长整数,其可存放数值范围为-2,147,483,648 ~ +2,147,483,647,但VB作计算时,将32判断成整数,1024 也判断成整数,
就任意在某个位置的内存上开启 2Byte大小来存放32×1024的值再回存至变量C,但32×1024已超过任意在某个地址的内存2Byte的大小,故溢
出。
●同理,C = -32768 - 1与 C = 32767 + 1 都也会溢出。
Private Sub command1_Click()
Dim C As Long
C = 32 * 32768
End Sub
●结果会如何?答案是1048576。为什么计算又变正常呢,因为VB在做此数值运算时,将32判断为整数,因为32768超过整数的范围,因为判断
成长整数,就任意在某个位址的内存上开启 4Byte大小来存放32×1024的值再回存至变量C,因此32×32768可以正常计算。
●怎么解决溢出问题呢?答案就是转换变量的类型,如下:
Private Sub command1_Click()
Dim D As Long
D = CDec(32) * CDec(1024) '转成十进制
D = CDec(-32768) - CDec(1) '转成十进制
D = CLng(32) * CLng(1024) '转成工整数
D = CLng(32767) + CLng(1) '转成长整数
End Sub
⑼ 整形变量溢出问题
你的printf语句写的不完整啊,有2个%d,后面就应该还有两个整型变量才行啊.你以为计算机程序是神,可以知道你想输出的是a,b啊
⑽ C语言中,无符号位长整型的溢出问题
在C语言层次上来说的话的确是忽略溢出部分而只保留余数
在更低级的层次上来讲,版忽略的那个权进位被保存到标志寄存器CF位上了
比如
unsigned int x=0xffffffff,y=1;
printf("%d\n",x+y);
得到的结果是0