工作日常记录:整数有符号数除以无符号数的那些事
问题 :32位有符号数作为被除数,16位无符号数作为除数,计算结果正常,但是当32无符号数作为除数就出出现异常情况
void test( void )
{int a = -33;unsigned short b = 11;unsigned int c = 11;SEGGER_RTT_printf(0,"a / b = [%d] , a / c = [%d] \r\n",a/b,a/c);
}
运算结果 : a / b = [-3] , a / c = [390451569]
原因:造成这种异常的原因是c语言的隐式数据类型转换
1、c语言规定 , 不同类型变量进行运算,长度较小类型的数据会被转为长度较大类型的数据参与运算,所以 a/b = -(33/11)
2、c语言规定 , 不同类型变量进行运算,相同长度类型的有符号数会被转为无符号数参与运算 所以a/c=0XFFFFFFDF / 11
修改方法:
void test( void )
{int a = -33;unsigned short b = 11;unsigned int c = 11;SEGGER_RTT_printf(0,"a / b = [%d] , a / c = [%d] \r\n",a/b,a/(int)c);/*此处注意c的取值范围*/
}
运算结果: a / b = [-3] , a / c = [-3]
总结:在数据运算中,特别是除法运算中,一定要尽量避免不同类型数据之间进行运算处理,如果一定要不同相关数据间进行运算处理,建议先将数据强制转换为相同类型再参与运算,这样可以避免出现运算异常情况的出现
工作日常记录:整数有符号数除以无符号数的那些事相关推荐
- C语言中 有符号数、无符号数、整数溢出
#include<stdio.h> void main() {int l=-1;unsigned int c=135; printf("%u\n",l+c); } 这个 ...
- 有符号数与无符号数的除法(转载)
有符号数与无符号数的除法 (2010-11-08 16:01:36) 正在上传-重新上传取消转载▼ 标签: it 分类: IT 这样一个问题: int a = -2; printf("%d ...
- 【转+】C中的有符号数和无符号数之间的转换
1. 在C语言中,数字常量如果没有后缀'U'或'u',则默认为是有符号数. 例: 其中1024和oxff这两个常量都是有符号数,这就意味着每个赋值操作包含了一个隐式的由有符号数到无符号数的类型转换. ...
- 有符号数与无符号数的加减法
声明: 本博文源自:http://www.echojb.com/computer/2016/10/06/227097.html 在此感谢博主! 一.有符号数的加减法 1.符号数与无符号数的人为规定性: ...
- C中的有符号数和无符号数之间的转换
1. 在C语言中,数字常量如果没有后缀'U'或'u',则默认为是有符号数. 例: [cpp] view plaincopy unsigned int n = 1024; unsigned int m ...
- 有符号数、无符号数、浮点数的理解
初学计算机的时候,我们就被告知,计算机只能理解0和1,任何东西都是由0和1编码组成.本文针对二进制数字是如何组成有意义的数字,涉及到的编码形式进行理解,主要集中在三个概念:有符号数.无符号数.浮点数. ...
- 有符号数和无符号数的转换及思考
1 有符号数和无符号数的表示 三者的最高位均为符号位. 我以前一直没弄明白的是为何8位补码的表示范围是-128~127, 今天查阅了相关资料,于此记下. 仍然以8位为例: 原码 原码的表示范围-127 ...
- 理解有符号数和无符号数的区别
理解有符号数和无符号数 回头看上一节,我们所讲的数都是正数.同样是年纪和工资,前者不需要有负值,但后者可能需要--至少所有的老板都这样认为. 那么,负数在计算机中如何表示呢? 这一点,你可能听过两种不 ...
- c语言中的无符号字节,C语言之有符号数和无符号数
我们知道,在C语言中存在无符号数和有符号数(一些高级语言如Java里面是没有无符号数的),但是对于计算机而言,其本身并不区别有符号数和无符号数,因为在计算机里面都是0或者1,但是在我们的实际使用中有时 ...
最新文章
- synchronized锁的基本用法
- Hibernate 笔记 缓存
- 段选择符和段描述符的关系
- 实现企业级分布式储存之mogilefs和fastdfs的应用
- 【图像融合】高斯金字塔
- 不是程序员,代码也不能太丑!python官方书写规范:任何人都该了解的 pep8
- cuda以及cudnn下载慢的问题解决!
- SPSSV20.0 下载及安装【SPSS 001期】
- java 修改分辨率_JAVA程序分辨率修改及自适屏修改
- CCF推荐的计算机顶级期刊和论文参考
- opensips配置
- restful接口实战 更新用put 新增用post 获取get 删除detele
- 蚂蚁金服 Service Mesh 大规模落地系列 - 网关篇
- 转载 ps教程制作立体字
- NEW a Girl Friend
- 在只有一个网线的前提下,实现两个电脑之间的局域网通信(伽卡他卡电子教室通信)...
- mac+unity3d准备工作——磨刀
- 发表科技类论文的期刊《科技新时代》杂志简介及投稿须知
- 数据库审计:DDL与DML
- 非计算机专业考计算机三级难吗,经验之谈:怎样通过计算机等级考试三级考试...
热门文章
- android平台的一款mud工具,全平台 MUD 客户端 TinTin++ 之安卓篇
- 旷视研究院张祥雨:3年看1800篇论文,28岁掌舵旷视基础模型研究
- 阿里云服务器Windows系统试用和配置
- 超实用:数字金额转成人民币大写
- 亲戚(relation)
- 苹果电脑如何正确断网?macOS操作系统断网方法来了
- shell 编程--shell的扩展功能(字符串切割与掐头去尾)、通配符、设置语言字符集
- 单反相机和镜头 怎么样才可以吧身边的mm拍的很漂亮!!
- linux 重建ext4分区表,Linux 格式化U盘为ext4格式以及修复分区表方法
- 【java并发探赜索隐】判断标志、死锁、守护进程