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;

二进制中截断及浮点数储存规则相关推荐

  1. C语言浮点数存储规则

    1.浮点型数据类型 float.double.long.double   目前常用的类型为float,用于存储单精度浮点数和双精度浮点数.浮点数使用IEEE( 电气和电子工程协会 )格式.   浮点类 ...

  2. .NET中小数,浮点数和双精度之间的区别?

    .NET中的decimal , float和double float什么区别? 有人什么时候会使用其中之一? #1楼 对我来说,这是一个有趣的话题,因为今天,我们遇到了一个讨厌的小错误,涉及到deci ...

  3. 二进制中 1 的个数

    二进制中 1 的个数 1.参考资料 https://leetcode-cn.com/problems/er-jin-zhi-zhong-1de-ge-shu-lcof/ 2.题目要求 题目描述 请实现 ...

  4. [转载] python怎么将十进制转换为二进制_python十进制和二进制的转换方法(含浮点数)

    参考链接: Python中的十进制函数 1 本文介绍了python十进制和二进制的转换方法(含浮点数),分享给大家,也给自己留个笔记,具体如下: 我终于写完了 , 十进制转二进制的小数部分卡了我将近一 ...

  5. 知多一点二进制中的负数

    hello~亲爱的看官老爷们新年好~相信不少同学知道,如果要将一个数字转换为它的相反数,在 Javascript 中,除了在它前面加个-号之外,还可以对该数字进行取反,之后再加 1.前者(本质是 0 ...

  6. SAP QM中阶之动态修改规则创建

    SAP QM中阶之动态修改规则创建 1, 执行事务代码QDR1或者如下的菜单路径, 可以用来创建动态修改规则. 点击菜单或者执行事务代码QDR1, 进入如下界面, 输入DMR的code,比如Z01,回 ...

  7. python十进制小数转二进制_python十进制和二进制的转换方法(含浮点数)

    本文介绍了python十进制和二进制的转换方法(含浮点数),分享给大家,也给自己留个笔记,具体如下: 我终于写完了 , 十进制转二进制的小数部分卡了我将近一个小时 上代码 #-*- coding: u ...

  8. C++中头文件的命名规则

    C++中头文件的命名规则,因为C++是从C语言发展而来的,为了与C兼容,C++保留了C语言中的一些规定,其中就包括用.h作为后缀的头文件,比如大家所熟悉的:stdio.h.math.h和string. ...

  9. 位运算的应用和分治法在二进制中的应用

    位运算应用口诀 清零取数要用与,某位置一可用或 若要取反和交换,轻轻松松用异或 移位运算 要点 1 它们都是双目运算符,两个运算分量都是整形,结果也是整形.      2 "<< ...

最新文章

  1. jQuery 图片高亮显示
  2. liun5实现DHCP地址分配笔记
  3. python arcgis批量绘图_ARCGIS中Python实现批量裁剪
  4. sofia-sip-ua >= 1.12.12… configure: error: no usable sofia-sip; please install sofia-sip-ua devel pa
  5. SASS教程sass超详细教程
  6. 华为路由器hilink怎么用_华为HiLink是什么?华为hilink智能联网怎么用
  7. 【词法分析和语法分析】编译原理实验一(hit)2022-lab1
  8. MOOC上的excel技巧
  9. 【风马一族_php】常用的语句
  10. 世界七大数学难题——千年大奖问题(转载)
  11. react开发插件-ES7 React/Redux/GraphQL/React-Native snippets
  12. FGUI+Laya Air 游戏架构之stage分层架构
  13. Android 创建单独的服务运行在后台(无界面)
  14. Vue3答题问卷H5实战
  15. Qt编写可视化大屏电子看板系统15-曲线面积图
  16. 朴素贝叶斯分类算法原理
  17. 超链接的字体颜色设置
  18. 【观察】释放开放计算新力量,重构数据中心新格局
  19. SAP MDG —— 简介MDG数据处理逻辑和MDF缓存区
  20. 【lighting】Color and Vision

热门文章

  1. 信息学奥赛一本通答案dj空格分隔输出1026
  2. python sort 函数和sorted函数的简单区别
  3. C# Windows服务程序编写
  4. UE插件AFC和GSHand的组合使用
  5. mac电脑听歌下歌那个好?试试lx music desktop!
  6. mysql数据库5.7版本二进制安装与破解mysql数据库密码
  7. ASTM D 4804非刚性固体塑料可燃性试验
  8. 顺序表创建和就地逆置
  9. 京东2018笔试题 神奇数
  10. 联通3G上网卡资费每月最低75元 套餐自动升级