二进制中截断及浮点数储存规则
1:截断
下方代码中,a为字符,b为有符号字符,c为无符号字符,给他们赋值整型,然后将他们以%d(整型 )的方式打印出来,会是什么结果呢?
答案为-1 -1 255,为什么呢?
整型是四个字节,字符为一个字节,将整型强行赋值给字符变量,因此发生截断,整型中只有一个字节的值赋予字符变量;
-1的二进制原码为10000000000000000000000000000001
反码为111111111111111111111111111111111110
补码为111111111111111111111111111111111111
内存中,a、b、c储存的都是1111111111,既二进制最后8位(一个字节);
但是当打印时则发生变化,打印的是整型,a、b、c都只有一个字节自然不够,因此需要进行补充,这时候就发生整形提升。
虽然a、b、c只有一个自己,但是打印的时候确实一个整型(4个字节)。
整形提升规则:有符号时,第一位为符号位,如果是1则补1,是0就补0;
无符号是则补0;
a为char类型,等同于signed char,既有正负。b与a一样;而c为无符号字符;
打印时,a的111111111的一个1被当做了符号位,因为是有符号字符,因此在111111111的前面补齐24位1,既11111111111111111111111111111111,它的原码是10000000000000000000000000000001,既-1; a=-1;
b与a一样,为-1;
c为无符号字符,因此在最前方补0,000000000000000000000011111111,由于最前面为0,既这个二进制的符号位0,既正数,因此原码反码补码都为这个数,而这个数的值为255,因此c=255;
2:将一个有符号的数以无符号大约(%u既打印无符号整型的意思)
-128的原码为10000000000000000000000010000000
反码为111111111111111111111111111101111111
补码为111111111111111111111111111110000000
a的内存存着10000000;
整型提升为11111111111111111111111110000000;
而这个数计算的结果为4294967168;
3:为什么会陷入死循环,且打印4294967295?
前面9-0好理解,但当0再减去一个1的时候,就为-1,-1 的补码为32个1;
但是要进行的是无符号的打印,所以结果第一位的1并没有当做符号位,而是把32个1都当做有效位数字,既正数的11111111111111111111111111111111,这个二进制数转化为十进制等于4294967295;
4:为什么打印出来的是255?
char类型只有一个字节,,无符号的8个比特的取值范围为0~255,既00000000~11111111,这个比较好理解。
无符号的取值范围比较不一样,127的二进制为01111111,再加1为1000000,但由于是无符号类型有正负,因此计算机认为第一个1为符号位,10000000为补码,反码为111111111,原码10000000
既-128;
5:浮点数存储规则
比如101.112,因为是正数,所有s=0;
(-1)^0*1.01112*2^2 最后的2是因为101.112变成1.01112,小数点向后移动了两位,因此101.112=1.01112*2^2;
以十进制为例,1010=1.01*10^3;
二进制中截断及浮点数储存规则相关推荐
- C语言浮点数存储规则
1.浮点型数据类型 float.double.long.double 目前常用的类型为float,用于存储单精度浮点数和双精度浮点数.浮点数使用IEEE( 电气和电子工程协会 )格式. 浮点类 ...
- .NET中小数,浮点数和双精度之间的区别?
.NET中的decimal , float和double float什么区别? 有人什么时候会使用其中之一? #1楼 对我来说,这是一个有趣的话题,因为今天,我们遇到了一个讨厌的小错误,涉及到deci ...
- 二进制中 1 的个数
二进制中 1 的个数 1.参考资料 https://leetcode-cn.com/problems/er-jin-zhi-zhong-1de-ge-shu-lcof/ 2.题目要求 题目描述 请实现 ...
- [转载] python怎么将十进制转换为二进制_python十进制和二进制的转换方法(含浮点数)
参考链接: Python中的十进制函数 1 本文介绍了python十进制和二进制的转换方法(含浮点数),分享给大家,也给自己留个笔记,具体如下: 我终于写完了 , 十进制转二进制的小数部分卡了我将近一 ...
- 知多一点二进制中的负数
hello~亲爱的看官老爷们新年好~相信不少同学知道,如果要将一个数字转换为它的相反数,在 Javascript 中,除了在它前面加个-号之外,还可以对该数字进行取反,之后再加 1.前者(本质是 0 ...
- SAP QM中阶之动态修改规则创建
SAP QM中阶之动态修改规则创建 1, 执行事务代码QDR1或者如下的菜单路径, 可以用来创建动态修改规则. 点击菜单或者执行事务代码QDR1, 进入如下界面, 输入DMR的code,比如Z01,回 ...
- python十进制小数转二进制_python十进制和二进制的转换方法(含浮点数)
本文介绍了python十进制和二进制的转换方法(含浮点数),分享给大家,也给自己留个笔记,具体如下: 我终于写完了 , 十进制转二进制的小数部分卡了我将近一个小时 上代码 #-*- coding: u ...
- C++中头文件的命名规则
C++中头文件的命名规则,因为C++是从C语言发展而来的,为了与C兼容,C++保留了C语言中的一些规定,其中就包括用.h作为后缀的头文件,比如大家所熟悉的:stdio.h.math.h和string. ...
- 位运算的应用和分治法在二进制中的应用
位运算应用口诀 清零取数要用与,某位置一可用或 若要取反和交换,轻轻松松用异或 移位运算 要点 1 它们都是双目运算符,两个运算分量都是整形,结果也是整形. 2 "<< ...
最新文章
- jQuery 图片高亮显示
- liun5实现DHCP地址分配笔记
- python arcgis批量绘图_ARCGIS中Python实现批量裁剪
- sofia-sip-ua >= 1.12.12… configure: error: no usable sofia-sip; please install sofia-sip-ua devel pa
- SASS教程sass超详细教程
- 华为路由器hilink怎么用_华为HiLink是什么?华为hilink智能联网怎么用
- 【词法分析和语法分析】编译原理实验一(hit)2022-lab1
- MOOC上的excel技巧
- 【风马一族_php】常用的语句
- 世界七大数学难题——千年大奖问题(转载)
- react开发插件-ES7 React/Redux/GraphQL/React-Native snippets
- FGUI+Laya Air 游戏架构之stage分层架构
- Android 创建单独的服务运行在后台(无界面)
- Vue3答题问卷H5实战
- Qt编写可视化大屏电子看板系统15-曲线面积图
- 朴素贝叶斯分类算法原理
- 超链接的字体颜色设置
- 【观察】释放开放计算新力量,重构数据中心新格局
- SAP MDG —— 简介MDG数据处理逻辑和MDF缓存区
- 【lighting】Color and Vision