判断C语言中int 与 unsigned 乘法是否会溢出
来源:互联网 发布:知净利润求利润总额 编辑:程序博客网 时间:2024/06/03 14:52
在C语言中,int 与 unsigned 乘法被定义为产生w(w为机器字长)位的值。如果乘积超过w位,所产生乘积的高位将被舍弃。
下面这段代码用来判断整数乘法会不会溢出:
/*练习题2.36*//*开发环境VC++ 6.0*/#include<stdio.h>void main(){unsigned x = 4294967295;unsigned y = 8;unsigned mul = x * y;int a = 2147483647;int b = 8;int m = a * b;unsigned short d = 65535;unsigned short e = 1;/*printf("unsigned: %u\n", mul);printf("0X%0X\n",mul);printf("signed: %d\n", m);printf("0X%0X\n",m);*/printf("%d\n",tmulOK(a,b));printf("%d\n",tmulOK2(a,b));printf("unsigned short: %d\n",tmulOK2(d,e));printf("%d\n",tmulOK3(x,y));}/*判断两整数相乘是否溢出,不溢出则返回1*/int tmulOK(int x, int y){int p = x * y;return !x || p/x == y;}/*判断两整数相乘是否溢出,不溢出则返回1*/int tmulOK2(unsigned short x, unsigned short y){int m = x * y;unsigned short i = ~0;int l = i;printf("m = 0X%0X\n",m);printf("l = 0X%0X\n",l);return (m & ~l) == 0;}/*判断两整数相乘是否溢出,不溢出则返回1*/int tmulOK3(unsigned x, unsigned y){_int64 m = (_int64)x * y; /*_int64(也可写为__int64)为64位整数。此处的(_int64)强制类型转换相当重要,如果不加此强制类型转换则x*y就会按照32位乘法进行运算,这样乘积中高出的32位的更高位将被舍弃。*/ printf("\ntmulOK3()\n");printf("m = 0X%I64d\n",m);return m == (unsigned)m;}
- 判断C语言中int 与 unsigned 乘法是否会溢出
- C语言中unsigned int 与 int 的自动转换
- [C语言]unsigned int与 int
- 判断int是否溢出
- 判断两个int类型的整数相加,相减是否溢出的C语言代码
- c语言中unsigned int和int的区别
- c语言中unsigned int和int的区别
- C语言中数据类型不一致导致安全性漏洞-memcpy()的参数 int 与 unsigned
- c 语言中无符号整型(unsigned)的溢出
- C语言unsigned char、char与int之间的转换
- C语言中类型转换:char转unsigned int
- 利用unsigned int 溢出
- C语言中判断int,long型等变量是否赋值的方法
- C语言溢出判断
- c语言判断两数相加是否溢出
- 判断Int类型数据是否溢出
- 用C语言区分signed int 与 unsigned int的一种思路
- C语言 算术转换 unsigned signed int
- C++中的抽象类以及接口的区别联系
- <jsp:forward>与response.sendRedirect()的区别
- Android Intent学习
- 你必须知道的 34 个简单实用的 Ubuntu 快捷键
- 【面试题】不用if,条件表达式,switch等判断语句------找出两个数中较大的
- 判断C语言中int 与 unsigned 乘法是否会溢出
- centos6.3安装Samba及权限
- J2EE、JSP环境配置(1):MyEclipse+JDK+tomcat
- 【面试题】eax寄存器---16位的。
- Cloud Found使用dev_setup进行单节点部署之排错分析
- 《影响力》读书笔记,第一章 影响力的武器
- 用if-else输出"hello world"
- DEDE织梦标签dede:arclist 详解
- apache无限二级域名配置方案