unsigned long long相加或者相乘,怎么判断溢出?

unsigned long long类型数据,相加或者相乘,怎么判断溢出?

c c++

4个回答

这个就用到了数学方面的知识了,你只需要对两个数分别取对数,并且看看他们的和是否大于等于64就行了。

log2(a)+log2(b) >= 64就是溢出,这两个方法需要包含math.h

用汇编就简单了, 标志寄存器里面有一个溢出标志位 OF, 检查这个标志位就可以了.
或者两数相加,判断它们的和如果小于某一个数则证明溢出

用unsigned long long类型所允许的最大值,减去或者除去其中一个减数或者因数,用所得结果与被减数或者另一个因数比较大小,前者大则没有溢出,否则溢出。

比如:五位数 * 五位数 的结果是 十位数(5 + 5)。先获取两个 long long 变量**数字**的长度,再相加,超过long long 规定的范围就超了

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
两个unsigned long或者long double 类型相乘,怎么判断结果是否溢出?
用C语言怎么写啊!
判断long long相加溢出,及溢出后取值范围
如果两个正数之和等于负数,或者两个负数之和之和等于正数,那么就是溢出。 ex: A, B, C 为 long long 类型 判断A+B>C? long long 取值范围为[-2^63,2^63-1] ①A+B取值为[2^63, 2^64-2]时越界,这时使用 long long存储后的值的区间为[-2^63,-2] 因为 2^63-2^64=-2^63 在取值...
unsigned long long与unsigned long 的问题
//==============================================rn//0408rn//二进制数转换成十进制数,位操作版rn//----------------------------------------------rn#includern#includern#includernusing namespace std;rn//----------------------------------------------rnint main()rnrn ifstream cin("change.txt");rn for(char s[65];cin>>s && s[0]!='-';)rn rn unsigned long x=0,tmp=1;rn for(int i=strlen(s);i--;tmp<<=1)rn if(s[i]=='1')rn x =tmp;rn cout<
unsigned long long
unsigned long long类型数据的size是8个byte,但是我在程序中发现用它定义的变量没法被赋予大于2**32-1的数据(应该最大是2**64-1),另外,用printf()输出的格式是什么?忘高手解答。
两个Long类型相乘溢出怎么解决
如题,今天面试,面试官问到一个问题,怎么处理两个Long类型相乘溢出的问题?
typedef int (TFTP)(unsigned long, unsigned long, unsigned long);什么意思
typedef int (TFTP)(unsigned long, unsigned long, unsigned long);什么意思
在c程序中如何高效判断两个unsigned long long型的变量相加是否溢出
在c程序中两个unsigned long long型的变量相加,如何高效判断和是否溢出?例如:rn有三个unsigned long long型的变量left, right, sum,rnsum=left+right;rn如何高效判断sum是否溢出。rn我知道有一个办法是比较sum与left或right的大小rn如果 sum
unpack怎么接收 unsigned long long类型
服务器是小端模式, 发送过来前8个字节是 unsigned long long 类型的数据, 我怎么用unpack来读出来呢?rnunpack("Q8md5/a10end_str", $recv_body); 这个不行 多谢
关于Unsigned long long 的问题
我在程序里定义了Unsigned long long 的变量,可是这个变量参与运算的结果都不对,为什么会这样呢?是编译器不支持吗?
unsigned long long类型匹配问题
#define A 0x0002000000000000rn#define B 0x0003000000000000rnrntypedef struct rn unsigned long long value1; rn unsigned long long value2; rntest;rnrntest test_array[] = A ,B;rn rnrn这个为什么总是提示integer constant is too large for ‘long’ typern
一生之敌(unsigned long long)
2014: 一生之敌 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 519  Solved: 59 [Submit][Status][Web Board] Description Input  第一行输入一个整数T,表示数据组数。   每组数据输入一个整数n。  1 &amp;lt;= T &amp;lt;= 100000  0 &amp;lt;= n &amp;l...
64位系统下 unsigned long long int 和 unsigned long int区别?
请问 64位系统下 unsigned long long int 和 unsigned long int是否有区别?rn如果没有区别的话,我是否可以在我的代码中这样定义保证在64位和32位的系统都可以使用。rn而且使用 %llu 不会产生报警rn谢谢rn[code=c]#define uint64_t unsigned long long int[/code]
unsigned long long是什么意思,与unsigned long的区别?
unsigned long long是什么意思,与unsigned long的区别?rn“unsigned 变量名”是什么类型?
long long unsigned long long 的最大值最小值在不同平台测试
long long ll_min= LLONG_MIN; long long ll_max = LLONG_MAX; unsigned long long ull_max = ULLONG_MAX;long long  unsigned long long 的最大值最小值在不同平台测试 #include #include using namespace std; int main()
整数相加溢出的解决办法:使用long
输入一个整数链表,求均值。别傻傻地认为直接遍历数组,做加法,然后输出均值就好了。需要考虑当输入的整数为Integer.MAX_VALUE时,直接将两个整数相加会产生溢出,需要使用Long保存sum。 public class AddAllNumber { public static Double averageOfArray(List&lt;Integer&gt; list){ ...
实现两个long long 相乘取模的汇编代码
long long multi(long long tp1,long long tp2){ long long ret=0; __asm__("movq %1,%%rax\n imulq %2\n idivq %3\n":"=d"(sum[i]):"m"(tp1),"m"(tp2),"m"(mod):"%rax"); return ret; }
C语言中unsigned long long数据类型
unsigned long long类型是目前C语言中精度最高的数据类型,可以用来表示20以内的阶乘数据,20以外的自测。 还有是unsigned long long的精度64位,double或者long double 虽然也占有8个字节,但是他们的实际精度只有53位。 #include #include unsigned long long jiecheng(int a); int
急问:有没有 unsigned long long的写法???
在vc里能否这样写 rn return (unsigned long long) a * b % m;
long 和 unsigned long 的奇怪现象(实在无法解释)
static long clktck = 0;rnrnif( clktck == 0 )rn if( ( clktck = sysconf(_SC_CLK_TCK)) < 0 )rn err_sys("sysconf error");rnrn首先是运行上述代码想得到系统时钟频率,但是得到的值始终是0,后来将起改成rnstatic unsigned long clktck = 0;rnrnif( clktck == 0 )rn if( ( clktck = sysconf(_SC_CLK_TCK)) < 0 )rn err_sys("sysconf error");rnrn居然就对了,取道了100的数值。很奇怪,本来100这么小,对于signed和unsigned应该一样才对。rn然后简单写了个程序再测试rnrnint main()rnrn unsigned long a = 100;rn long b = 100;rn return;rnrn这次更加奇怪,我在GDB中调试,运行到打印命令的时候,a的值为100,b的值为 8665408,十六进制为 0x843940,请问这个如何解释?这种情况瓦连续运行了两遍,所以,应该不是由于寄存器缓冲之类的原因把。rn后来瓦将上述代码加了一句输出,如下,rnint main()rnrn unsigned long a = 100;rn long b = 100;rnrn printf("%ld\n\n%ld\n\n",a,b);rn return;rnrn这种现象又消失了。rn这到底是怎么回事呢?
unsingned long除以unsigned long的问题
怎么算? 直接除肯定不行,求解~~~~~
怎样打印unsigned long long 类型的数据
如rn unsigned long long total;rn total = 20000000000000;rn printf("??",total);rn??应该用什么啊
LONGLONG 转化为 unsigned long long 的问题
问题描述:rn 函数声明 LONGLONG GetSpace();函数可能返回-1,下面的代码rn rn unsigned long long llResult = GetSpace();rn if(llResult == -1)rn rn dosomething;rn rn rn 按照道理,dosomething应该是永远都不会执行的啊,因为通过-1转化为unsigned long long 结果为14757395258967641292,但是有时却执行了dosomething,实在没搞明白为什么,请高手指教一下,谢谢。rnrn 编译环境 vs2005;rnrn
高低位转换为unsigned long long 的问题
#include rnrnint main()rnrn unsigned long long num;rn unsigned int high = 0, low = 1111 ;rn rn num = high ;rn num = num<<32+low ;rn printf("num is %llu\n", num) ;rnrnrn为什么输出的是0呢
unsigned long的问题
BYTE num[4];rnunsigned long num0=265;rnrnmemcpy(&num,&num0,sizeof(num0));rnrn为什么会num[0]=-52,num[1]=9,num[2]=1,num[3]=0,以前学的知识忘得模糊了,哪位能给解释解释?rn
unsigned long _ _cdecl _beginthreadex ....
如题所示的断续下划线 _ _ 是什么意思?
C语言打印short、long、long long和unsigned类型整数
要打印unsigned int 数字,可以使用%u符号。打印long数值,可以使用%d 格式说明符。如果系统的 int 和 long 类型具有同样的长度,使用%d 就可以打印 long 数值,但是这会给程序移植到其他系统(这两种数据类型的长度不一样的系统)带来麻烦,所以建议使用 %ld 打印 long 数值。在x和o符号前也可以使用l前缀,因此 %lx表示以十六进制格式打印长整数,%lo 表示
(*(volatile unsigned long *)详解
(*(volatile unsigned long *)详解
unsigned long 最大是多少?
我想得到unsigned long的最大数,rn也就是二进制表示 11111111111111111111111111111111rnrnunsigned long X = 0xFFFFFF? // 几个F?
unsigned int 返回 long
unsigned int 谁能给回答一下在什么情况下返回long rn除了int 值超过10位的情况
unsigned long的缩写,UL.....
看到unsigned long类型可以直接用UL这样的缩写来代替,比如:5UL。想问下,同理的unsigned int..是不是也有相同的表示方式?
UNSIGNED LONG 0x1000的输出格式
程序中有下面的代码:rnULONG length = 0;rnLARGE_INTEGER offset = 0 ;rnrn...rnrnif (IRP_MJ_WRITE == Irpsp->MajorFunction)rnrn //如果是写的irp请求,我们在irp stack中取得相应的参数作为offset和lengthrn offset = Irpsp->Parameters.Write.ByteOffset;rn length = Irpsp->Parameters.Write.Length;rn KdPrint(("IRP_MJ_WRITE:offset:%x.length:%ld!\n",offset.QuadPart,length));rnrnrnWinDBG调试时显示的输出信息一直是下面这样,length是0rnIRP_MJ_WRITE:offset:3e878800.length:0!rnrn单步调试,在length = Irpsp->Parameters.Write.Length;这儿显示 length = UNSIGNED LONG 0x1000rn但是下一步输出信息还是 IRP_MJ_WRITE:offset:3e878800.length:0!rnrn不知道哪儿出问题了,是ULONG的输出格式不对么?要用什么?rn谢了!
unsigned long类型转换无效?
我之前的一个项目需要用到回调函数, 它的参数是DWORD_PTR 而我发现在这个空填函数名字会报错..rn强制转换" (DWORD_PTR)func"就报错说类型转换无效, 继续深入研究, 无论是新建项目, 还是换另一台电脑,rn这个问题依在...rnrn后来我试了下这样:rnrnvoid func()rnDWORD_PTR temp = (DWORD_PTR)func;rnunsigned long temp2 = (unsigned long) temp2;rnrn即使是这样还是会报错......rn救命啊啊啊 这什么问题啊 c的类型转换不是万能的吗,
Unsigned Long Int 3991927620
请问这句话是什么意思 Long ? Int?
unsigned long的一点应用
#include int main() { unsigned long a=~0UL; //0为unsigned long类型,并且每位取反,下同。运行下试试~,把%lu改为%ld再试试~ unsigned long b=1UL; unsigned long c=1UL<<16; unsigned long d=1UL<<24; printf("a=%
unsigned long的困惑
一段C代码:rnunsigned long k;rnk= 0xff000000;rnprintf("%d",k);rn在VC下运行的结果:rn-16777216rnrn在TC下的结果为:rn0rnrnunsigned long不是无符号吗?怎么会有负值输出?而TC的结果好像也不太对啊。rn请大虾赐教◎
A question about C short, long, long long, and unsigned Types
int main(void)rnrn unsigned int un = 3000000000; /* system with 32-bit int */rn short end = 200; /* and 16-bit short */rn long big = 65537;rn long long verybig = 12345678908642;rn printf("un = %u and not %d\n", un, un);rn printf("end = %hd and %d\n", end, end);rn printf("big = %ld and not %hd\n", big, big);rn printf("verybig= %lld and not %ld\n", verybig, verybig);rn return 0;rnrnrn在XP下运行(MyTC5.4.1)结果是:rnun = 24064 and not 24064rnrnend = 200 and 200rnrnbig = 65537 and not 1rnrnverybig= 1942899938 and not 1942899938rnrn但书上的结果为:rnun = 3000000000 and not -1294967296rnrnend = 200 and 200rnrnbig = 65537 and not 1rnrnverybig= 12345678908642 and not 1942899938rnrn哪种答案是对的呢? 这几种int格式到底怎么个范围...rnrn
long long int 溢出问题,求指导
#include "stdafx.h"rn#includern#includernint main() rn int bytes_of_int;rn int bits_of_int;rn int biggest_of_int;rn bytes_of_int = sizeof(int);rn bits_of_int = bytes_of_int * 8;rn biggest_of_int = pow(2, bits_of_int - 1) - 1;rn printf("There are %d bytes in a int,equals %d bits,and it can signify %d at most.\n", bytes_of_int, bits_of_int, biggest_of_int);rn printf("When overflow ,%d\n", biggest_of_int + 1);rnrn short int bytes_of_short_int;rn short int bits_of_short_int;rn short int biggest_of_short_int;rn bytes_of_short_int = sizeof(short int);rn bits_of_short_int = bytes_of_short_int * 8;rn biggest_of_short_int = pow(2, bits_of_short_int - 1) - 1;rn printf("There are %hd bytes in a short int,equals %hd bits,and it can signify %hd at most.\n", bytes_of_short_int, bits_of_short_int, biggest_of_short_int);rn printf("When overflow ,%hd\n", biggest_of_short_int + 1);rnrn long int bytes_of_long_int;rn long int bits_of_long_int;rn long int biggest_of_long_int;rn bytes_of_long_int = sizeof(long int);rn bits_of_long_int = bytes_of_long_int * 8;rn biggest_of_long_int = pow(2, bits_of_long_int - 1) - 1;rn printf("There are %ld bytes in a long int,equals %ld bits,and it can signify %ld at most.\n", bytes_of_long_int, bits_of_long_int, biggest_of_long_int);rn printf("When overflow ,%ld\n", biggest_of_long_int + 1);rnrn long long int bytes_of_long_long_int;rn long long int bits_of_long_long_int;rn long long int biggest_of_long_long_int;rn bytes_of_long_long_int = sizeof(long long int);rn bits_of_long_long_int = bytes_of_long_long_int * 8;rn biggest_of_long_long_int = pow(2, bits_of_long_long_int - 1) - 1;rn printf("There are %lld bytes in a long long int,equals %lld bits,and it can signify %lld at most.\n", bytes_of_long_long_int, bits_of_long_long_int, biggest_of_long_long_int);rn printf("When overflow ,%lld\n", biggest_of_long_long_int + 1);rn long long int biggest_of_long_long_int_test = 9223372036854775807;rn printf("%lld\n", biggest_of_long_long_int_test);rn printf("%lld\n", biggest_of_long_long_int_test + 1);rn getchar();rn return 0;rnrn
(( volatile unsigned long *) )和volatile(( unsigned long *) )区别volatile
(( volatile unsigned long *) 0xE0028000)和rnvolatile(( unsigned long *) 0xE0028000)区别rn我怎么感觉第一种volatile修饰的是地址,而第二种修饰的是值,然后volatile的作用是表示值是不确定的,而不是地址,但是所有的定义一般都是用的是第一种,为什么啊 rn
超过long long的整数字符串相加,LeetCode
字符串相加 题目描述提示帮助提交记录社区讨论阅读解答 随机一题 给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。 注意: num1 和num2 的长度都小于 5100. num1 和num2 都只包含数字 0-9. num1 和num2 都不包含任何前导零。 你不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式。大神代码,源代码java,自己...
long类型数值溢出
msOfDay = 86400000 msOfWeek = 604800000 msOf30Days = -1702967296 计算日期差时分母可能要1000*3600*24*30,这时分母是月,结果就是第三个溢出的值,因为这4个乘数都是int型 解决方法是1000换成1000L,直接用long类型 http://www.blogjava.net/aoxj/ar
相关热词 c# 线程结束时执行 c# kb mb 图片 c# 替换第几位字符 c#项目决定成败 c# 与matlab c# xml缩进 c#传感器基础 c#操作wps c# md5使用方法 c# 引用父窗口的组件