梦想还是要有的,万一忘了咋办?

0%

介绍

架构图是展示软件系统的 整体全貌、组件关系、部署情况、演进方向 视图语言。

作用

传递架构师要表达的信息,快速评估架构的可行性、安全性、以及问题所在。

分类

分类较多,目前以 4+1视图(场景视图、逻辑视图、物理视图、处理流程图、开发视图)、4C(上下文、容器图、组件图、代码图)为主流。

4+1视图

场景视图

描述 参与者与功能用力的关系,通常以用例图表示。
upload successful

逻辑视图

描述软件功能拆解后的组件关系,组件约束和边界,通常用 组件图来表示
//TODO 添加组件图图片

物理视图

描述软件到硬件的映射关系,反映出系统的组件是如何部署到一组计算器节点上的,通常以 部署图表示

处理流程图

描述系统之间、组件之间通信时序,数据的输入输出,反应系统的功能流程与数据流程,通常由时序图和流程图表示。

开发视图

描述系统的模块划分和组成,以及细化到内部包的组成设计,服务于开发人员,反映系统开发实施过程。

4C图

上下文(语境图Context)

语境图

参与者、系统之间的关系,系统状态进度。
抽象说:
人、ofo 是2个独立存在的事物,可以称作context。

容器图

容器图
互相独立存在的应用(占用独立的pid 就可以看做一个容器)例如:

  • 终端应用:
    APP、API接口、WEB
  • Web服务器:
    apache、 nginx
  • Web应用:
    部署在 Tomcat、jetty、resion、jboss、Weblogic、Websphere 一个应用
  • 数据库应用:
    Mysql、Oracle、Mongodb
  • 其它
    ELK、文件系统、dns服务 抽象说: ofo 可以分解为 车子、APP、其它 这些可以被称为容器。

组件图

这张组件图不是很严格,没有表示清楚组件提供的能力名称。
组件图
容器是由多个组件构成,所有组件应当运行在同一个进程中。

抽象说:
车子 可以分解为 车胎、车把、车蹬子、车座子、链条、车架、其它 这些可以被称为组件。

代码图

类图

抽象说: 外胎、内胎、辐条、轮圈、轴承 生产方式,轮胎 组装方式 。

upload successful
upload successful

加载器类型

启动加载器

  • BootstrapClassLoader
  • C++语言实现
  • 负责加载\lib (或者 -Xbootclasspath 参数指定路径)目录中的类库加载到内存

扩展加载类

  • ExtensionClassLoader
  • Java实现
  • 负责加载\lib\ext目录(或者java.ext.dirs系统变量指定的路径)所有类库

应用程序类加载器

  • ApplicationClassLoader
  • 负责加载 classpath 上的指定类库,我们可以直接使用这个类加载器

双亲委派模式

类架加载器在加载一个类时先咨询自己发父亲是否已经加载如果已经加载就直接返回,没有加载子加载器就进行加载。
upload successful

题记

在写单例模式的时候涉及到了线程安全,继而又涉及到了volatile、无序写入、synchronized等内容到此为止有必要了解下JMM了。

介绍

Java虚拟机中通过java内存模型屏蔽 各种硬件和操作系统的内存访问差异,以实现让java程序在各种平台下都能够达到一致的内存访问效果

性能一致性方案

性能一致性方案(下图)
upload successful
java也有有采用类似方案(下图)
upload successful

方案带来的挑战:

可见性

一个线程写入的数据是否能立刻马上被其它线程看到。是否存在不能被看到的可能性?

应对-可见性
  • volatile 关键字,被它修饰后表示:线程本地缓存失效,每次从主存里面拉去数据。
  • 同步锁有序执行
原子性

一个操作是否可以被一个线程一个计算机写指令完成?如果存在多个写指令完成的操作就会破坏掉原子性。(高级语言的一个指令往往被分割成1个或者多个计算机指令)

应对=原子性
  • atomicXX解决方案
  • 基本变量(除 long,double外)的赋值操作。64位系统也被拆分位2个指令集合
  • 同步锁有序执行

重排序

编译器和处理器为了优化执行效率可能会调整指令执行顺序。
upload successful

方案带来的挑战

有序性

一个指令集合是否被按照一定的顺序执行?重新排序后是否与原有执行顺序一致?

应对-有序性(happens-before)

1、程序次序规则:一个线程内,按照代码顺序,书写在前面的操作先行发生于书写在后面的操作。
2、锁定规则:一个unLock操作先行发生于后面对同一个锁的Lock()操作。
3、volatile变量规则:对一个变量的写操作先行发生于后面对这个变量的读操作。
4、传递规则:如果操作A先行发生与操作B,而操作B先行发生于操作C,则操作A先行发生于操作C。
5、线程启动规则:Thread对象的start()方法先行发生于此线程的每一个动作。
6、线程终端规则:对线程interrupt()方法的调用先行发生与被中断线程的代码检测到中断事件的发生(只有执行了interrupt()方法才可以检测到中断事件的发生)。
7、线程终结规则:线程中所有操作都先行发生于线程的终止检测,我们可以通过Thread.join()方法结束,Thread.isAlive()的返回值手段检测到线程已经终止执行。
8、对象终结规则:一个对象的初始化完成先行发生于它的finallze方法的开始。

总结

上面提到的原子性、可见性、有序性等解决方案是有关系的,其中happens-before 是其它的基础。

upload successful

单例模式

介绍

程序运行周期内这个对象最多被创建一次,这类对象我们称之为单例,这个设计模式称作单例模式。

特点

  • 私有化构造;
  • 通过调用静态方法获取对象;
1
2
3
4
5
6
private Singleton() {
//do something
}
public static Singleton getInstance() {
return instance;
}

实现方式

饿汉式

代码示例

1
private static Singleton instance = new Singleton();

优势

  • 简单
  • 线程安全

劣势

  • 资源效率不高,当执行其它静态方法 或者 class.forName 时就会被初始化。

懒汉式

代码示例

1
2
3
4
5
6
7
public synchronized static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}

return instance;
}

优势

  • 线程安全

劣势

  • synchronized 的使用造成资源消耗较大

双重检查

代码示例

1
2
3
4
5
6
7
8
9
10
public static Singleton getInstance() {
if (instance == null) {
synchronized (Singleton.class) {
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}

优势

  • 线程安全
  • 第一次以后调用 不再受到 synchronize 影响;

劣势

  • java内存模型(jmm)无序写入可能会引发,对象创建失败问题;

静态内部类

代码示例

1
2
3
4
5
6
private static class NoThing {
private static Singleton instance = new Singleton();
}
public static Singleton getInstance() {
return NoThing.instance;
}

优势

  • 线程安全
  • 延迟加载
  • 资源消耗低

劣势

  • 较饿汉模式代码较复杂

总结

关系图谱

upload successful

对比

upload successful

个人观点

你会写一个 消耗资源且可能不被调用的单例吗?所以 就用饿汉模式吧。

概述

前两天学习到利润表,就利用分析了梨农的利润情况。整体感觉梨农太不容易了,干了赔钱不干还得外出务工,但整体对财务知识用到的不多,今天想构建一个梨农的故事来学以致用 财务知识。

知识点

  • 资产负债表是什么、作用
  • 利润表是什么、作用
  • 现金流量表是什么、作用
  • 财务科目是什么、作用

故事开始

第一章、开始

小鱼、小李跟小花三个人准备创业。在经过慎重考虑后决定成立一个果园,果园位置就定在了石家庄赵县。

注册公司

经过讨论三人各自出资10万,注册《梨花雨果园有限公司》。以下是公司概要信息:

名称 备注
公司名称 梨花雨果园有限责任公司
注册资本 30万
法人 小鱼
监事 小花

第二章、财务报表

台账(流水账)

台账规划的好会有事半功倍的效果。
upload successful

期初

三个人都是农民出身,说起怎么种树大家都很在行,但在聊到 资产负债表 应该包含哪些科目的时候,都傻眼了。最后通过网上查阅下资料确定了具体科目。
upload successful

租地&置办机器后

upload successful
思考问题

  • 已支付租赁费用、已支付工资该如何表示?

贷款后

upload successful
思考问题

  • 日常经营支出:灌溉费用、农药费用、人工费用该如何表达

    收获后

    upload successful
  • 思考问题*
  • 存货如何货币化?依据生产产本记录?还是依据 预计销售价记录

销售后

upload successful
思考问题

  • 营业收入如何记录

    还清欠款后

    upload successful

第三章、利润分析

利润表

upload successful

第四章、总结

暂无

背景

从小在梨树下长大,与梨树相关的工作没有没干过的:

  • 10+次浇地 (2月-11月)
  • 10次打药 (2月-9月)
  • 疏花疏果 (4月)
  • 套袋 (5月)
  • 卸梨、包梨、装箱、入库(8月-10月)
  • 卖梨(8月-次年5月)

2010年以后人均收入快速上升,非农产品物价上涨飞速,最重要的房价坐上火箭一般窜。老乡们能出国,能进城的绝对不会留下来种地。财务里面讲的是利润率、投资回报率,我们来为果农算一笔账。

抽离 成本项

调研问题:

  • 雪梨有几亩地:4亩
  • 多少棵雪梨树:80
  • 一年收多少件雪梨:750
  • 15-19年价格:25、35、35、
  • 一年浇几次地:5 次 2次肥料1000/次
  • 一年打几次药:6次
  • 几次药 分别多少钱:300/次
  • 一件梨包装费:11
  • 一件梨制冷费:5

成本项以及条件假设

upload successful

利润表

upload successful

总结

分析利润表,关键因素有 售价、包装、冷藏、人工上面。其中 包装、冷藏成本上涨较小,人工成本上涨十分剧烈 但售价基本无变化。导致 2010年以后种地 远远不如 外出务工收入高。

改进

物价上涨是趋势所以 包装、冷藏、人工成本无法降低,只能想法提升售价。提升售价方式:

  • 更换品种例如 皇冠 近些年售价在40-100元/件。
  • 减少中间环节 直接铺货到零售商。

upload successful

大家对“人工智能”

概览

个人观点

  • 这次讲的人工智能本质就是神经网络+数据。
  • 人工智能 不会威胁到人的生存 ,的确会解放一些劳动力。
  • 人工智能 就像计算器、计算机、汽车 是人类的工具(如同 汽车让人日行千里、计算机让人计算简化,人工智能可以多方面增幅人类)

介绍

人工智能 让机器具备人类的视觉、听觉、嗅觉、逻辑推理等能力。目前有两大类方案一类是基于规则,一类是神经网络。此次人工智能浪潮之前一直是规则占据上风。得益于 全球数据电子化,计算能力提升才导致了神经网络卷土从来。
现在再给人工智能做个理解就是,让计算机利用神经网络(深度学习)通过大量数据的训练后而具备的一些人类具备的特殊能力(图形识别,语音识别等能力)。
upload successful

神经网络发展史

upload successful

人工智能进展

upload successful
目前来看 语音、图像识别、逻辑推理、自然语言交流处于技术成熟期(可以以此开发应用重构一些行业),可以考虑以下行业:
upload successful

对人工智能的误解

1
2
误解1:人工智能等于机器人。
事实:人工智能是包含大量子领域的全部术语,涉及广泛的应用范围。
1
2
误解2:人工智能对标的是O2O,电商和消费升级这样的具体赛道。
事实:人工智能提供的是为全产业升级的技术工具。
1
2
误解3:人工智能的产品离普通人很遥远。
事实:现实生活中,我们已经在使用AI技术,而且无处不在。例如:邮件过滤、个性化推荐、微信语音转文字、苹果Siri、谷歌搜索引擎、机器翻译、自动驾驶等等。
1
2
误解4:人工智能是一项技术。
事实:人工智能包含许多技术。在具体的语境中,如果一个系统拥有语音识别、图像识别、检索、自然语言处理、机器翻译、机器学习中的一个或几个能力,那么我们就认为它拥有一定的人工智能。
1
2
误解5:通用型人工智能将在短期内到来。
事实:短期内,通用型人工智能不是产业界主流的研究方向。我们更有可能看到深度学习技术在各个领域深耕。
1
2
误解6:人工智能可以独立、自主地产生意识。
事实:目前的人工智能离通用型人工智能还有一段距离。工具型人工智能无法产生意识。
1
2
误解7:人工智能会在短期内取代人类的工作。
事实:人工智能在不同领域的应用成熟度差别很大,虽然现在人工智能已经能在围棋领域战胜世界上最强的职业棋手,但可能还需要50年才能自主创作出畅销作品。工具型人工智能和人类的能力在许多情境下是互补的,短期内更有可能出现的是人机协作的状态。

资本思路

upload successful

入场思路

  • 选择成熟技术 结合 已有行业特点 重构新的商业模式。
  • 选择未成熟技术 深耕技术。

参考书目

  • 人工智能 腾讯研究院
  • AI.未来 李开复
  • 人工智能 李开复

title: 财务报表
author: Hardy Dou
tags:

  • 财务
    categories:
  • 财务
    date: 2019-02-13 22:05:00

三张表

upload successful

第一步、利润表

利润表更多的是给现金流量表和资产负债表提供输入,所以利润表比较容易建立。为了建立利润表,必须对影响利润表的一系列因素进行假设。一些最基本的假设如下:

upload successful

指标关系

  • 销售额增长 :模型中最底层的预测指标。
  • 边际贡献(Tcm): 销售收入 - 变动成本
  • 运营杠杆 :又称营业杠杆或营运杠杆,反映销售和息税前盈利的杠杆关系。指在企业生产经营中由于存在固定成本而使利润变动率大于产销量变动率的规律;计算公式 息税前利润变动率/产销业务量变动率;
    DOL=(EBIT+F)/EBIT 或者 DOL=Tcm/(Tcm-F)
    F 即固定成本
    EBIT 为息税前收益
  • 净利润增长率 :(当期净利润-上期净利润)/上期净利润*100%
  • 净资产收益率(ROE):净资产收益率又称股东权益报酬率/净值报酬率/权益报酬率/权益利润率/净资产利润率,是净利润与平均股东权益的百分比

质量监控指标

运营杠杆

一般来讲,一个公司的运营杠杆相对固定。如果预测未来公司的各项数字,发现运营杠杆与历史相比有重大变化,这时候就要重新检查各种假设,看是不是有不合理的地方。一般模型假设都没有深入的固定成本与费用和可变成本与费用的分析,很容易把运营杠杆的效果就忽视了

净利润增长率与ROE

在盈利能力与资本结构不变的情况下,ROE就是净利增长的极限。如果净利润增长远远超过历史平均ROE水平,那么这个公司一定有重大的改变,比如增发或借贷这样的资本结构变化,或者盈利能力的大幅度提高。如果没有这些重大改变,肯定有一些假设是错误的。

第二步、资产负债表

upload successful

指标关系

  • 现金部分(现金流量表
  • 借款 :现金流量表的筹资部分
  • 固定资产及无形资产 :现金流量表的经营现金流和投资现金流
  • 股东权益:现金流量表的筹资部分
  • 存留收益:利润表中的净利润(利润表

质量监控指标

现金转换周期

现金转换周期=存货转换期间+应收账款转换期间-应付账款递延期间=生产经营周期-应付账款平均付款期

第三步、现金流量表

upload successful

指标关系

质量监控指标

  • 资产周转率
  • 财务杠杆

总结

upload successful

安装IntelliJ

下载地址

http://www.jetbrains.com/idea/download/

激活教程

http://idea.lanyus.com/

安装插件

Grep Console
FindBugs
CheckStyle
GsonFormat
Jrebel
AceJump
markdown
Key promoter
.ignore
Maven
Alibaba Java Coding 
CamelCase
Gradle Dependencies Formatter
Gradle Dependencies Helper
LiveEdit
Translation

熟悉快捷键

ctrl+?

  • ctrl+E,打开最近文件
  • ctrl+J,快速打开帮助文档
  • ctrl+enter ,生成代码
  • ctrl+O ,覆盖方法
  • ctrl+I,实现接口方法
  • ctrl+R,运行程序
  • ctrl+D,调试程序

ctrl+alt+?

  • ctrl+alt+o,移除未使用 imports
  • ctrl+alt+I, 调整光标所在行缩进
  • ctrl+alt+R ,列出可执行菜单
  • ctrl+alt+H, 方法调用记录

调试Java

打印gc信息

添加Vm参数:

  • -verbose:gc 设置垃圾回收日志打印的文件,文件名称可以自定义)
  • -XX:+PrintGCTimeStamps (打印垃圾回收时间信息时的时间格式)
  • -XX:+PrintGCDetails(打印垃圾回收详情)
  • -Xmx64m (限制内存大小,模拟内存溢出时用)
    示例:
    upload successful

JVM的GC日志的主要参数包括如下几个:

  • -XX:+PrintGC 输出GC日志
  • -XX:+PrintGCDetails 输出GC的详细日志
  • -XX:+PrintGCTimeStamps 输出GC的时间戳(以基准时间的形式)
  • -XX:+PrintGCDateStamps 输出GC的时间戳(以日期的形式,如 2013-05-04T21:53:59.234+0800)
  • -XX:+PrintHeapAtGC 在进行GC的前后打印出堆的信息
  • -Xloggc:../logs/gc.log 日志文件的输出路径

基础知识

  1. 原码、反码和补码是计算机存储数字的编码方式(表示方法)。
  2. ASCII码、utf-8和utf-16是计算机存储字符的编码方式。

你需要了解的存储单位

符号 中文 解释
b (bit) 比特,位 存放一位二进制数,即 0 或 1,最小的存储单位
B (Byte) 字节 1B = 8b
KB KB 1KB = 2^10B = 1024B
MB 1MB = 2^20B = 1024 * 1KB
GB G 1GB = 2^30B = 1024 * 1MB
TB T 1TB = 2^40B = 1024 * 1GB
  • 存储设备一般以B为常用单位;
  • 宽带传输速度是以Kb为单位,与实际存储单位KB有所不同。(我办理了一个100M带宽,实际速度不会超过100/8=12.5M)

基本数据类型

类型 字节数 位数 最小 最大
byte 1Byte 8Bit -2^7(-128) 2^8-1(127)
short 2Byte 2 * 8Bit -2^15(-32768) 2^15-1(32768)
int 4Byte 4* 8Bit -2^31 2^31-1
long 8Byte 8 * 8Bit -2^63 2^63-1
float 4Byte 4 * 8Bit -2^
double 8Byte 8* 8Bit
char 2Byte 2* 8Bit \u0000 \uffff
boolean 0 1bit 0 1

浮点型

  1. float
  2. double

在数学中,特别是在计算机相关的数字(浮点数)问题的表述中,有一个基本表达法:
value of floating-point = significand x base ^ exponent , with sign
译为中文表达即为:
(浮点)数值 = 尾数 × 底数 ^ 指数,(附加正负号)
于是,float的指数范围为-127128,而double的指数范围 为-10231024,并且指数位是按补码的形式来划分的。其中负指数决定了浮点数所能表达的绝对值最小的数;而正指数决定了浮点数所能表达的绝对值最大的数,也即决定了浮点数的取值范围。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[高位] ------------------------> [低位]                      
[*][********][***********************]

1符号位 ↑
8位指数 ↑
23位尾数(基数是【1.<尾数>】)
比如:
Float Value:0.75
IEEE Memory:0-01111110-10000000000000000000000
符号位是:正数,
指数部分是:01111110,即126,根据指数的规则-127~128,0在中间.与char不同。
也就是01111111代表数字0。 01111110就是-1(126-127=-1)
基数就是1.100000000
二进制值就是:1.1 * 2^-1 = 0.11
十进制表示就是:2^-1 + 2^-2 = 0.5 + 0.25 = 0.75

  1. 原码:符号位+数值的绝对值。
    (1)以8位为例,1的原码为 0000 0001,-1的原码为 1000 0001。
    (2)取值范围:11111111 ~ 01111111,即:-127 ~ 127。
  2. 反码:正数的反码是原码,负数的反码是在原码的基础上符号位不变,其他位取反的结果。
    以8位为例:1的反码为 0000 0001,-1的反码为 1111 1110。
  3. 补码:正数的补码是原码,负数的补码是在原码的基础上符号位不变,其他位取反再加一,即:反码+1。
    以8位为例:1的补码为 0000 0001,-1的补码为 1111 1111。
  4. 补码存在的意义
    (1)1 - 1 = 1 + (-1) = (0000 0001)(原) + (1000 0001)(原) = (1000 0010)(原) = -2。错误
    (2)3 + 5 = (0000 0011)(原) + (0000 0101)(原) = (0000 1000)(原) = 8。正确
    (3)反码相减:3 - 4 = (0000 0011)(原) + (1000 0100)(原) = (0000 0011)(反) + (1111 1011)(反) = (1111 1110)(反) = (1000 0001)(原) = -1。正确
    (4)反码相减:5 - 3 = (0000 0101)(原) + (1000 0011)(原) = (0000 0101)(反) + (1111 1100)(反) + 1(循环进位)= (0000 0010)(反) = (0000 0010)(原) = 2。正确
    (5)1 - 1 = 1 + (-1) = (0000 0001)(反) + (1111 1110)(反) = (1111 1111)(反) = (1000 0000) = -0。
    (6)1 - 1 = (0000 0001)(原) + (1000 0001)(原) = (0000 0001)(补) + (1111 1111)(补)= (0000 0000) (补) = (0000 0000) (原) = 0。
    (7)-1-127 = (1000 0001)(原) + (1111 1111)(原) = (1111 1111)(补) + (1000 0001)(补) = (1000 0000)(补) = -128。
    A、由(1)和(2)可知,原码相加是正确的,但是相减是错误的。
    B、由(3)和(4)可知,反码相加减都是正确的。
    C、但是由(5)可知,1-1的反码结果为-0,这个结果在数学上是没有意义的,为了解决这个问题,引入了补码。因为补码是在反码的基础上加1,故补码的加减是没有问题的,关键是1-1了。由(6)可知,补码完美的解决了1-1等于-0的尴尬局面,直接得到0。
    D、由(7)可知,计算机底层算法规定了补码1000 0000 = -128。这也就导致了补码的取值范围由-127127变为-128127。

总结:
(1)由于原码相减结果不对,故使用了反码。但是反码1-1得到的结果是-0,这个在数学上是无意义的,为了导出1-1=0的正确结果,故使用了补码,同时规定补码1000 0000 = -128,从而可以将-0表示为-128,拓展了一个表示位,故8位二进制取值范围为-128~127。
(2)这里再次强调,在计算机中,数据都是以正数的补码的形式存在的。正数的补码是其本身,负数则是以其本身的正数的补码的形式存在的。
栗子:-123在计算机中的存储的值是1111 1011 -> 1000 0100 -> 1000 0101。

int

占用4个字节,即:32b,有符号位:从左数第一位。
取值范围:-2^31 ~ 2^31-1。
原因:0 代表 +0,-0 代表 -2^31,故负数比整数多一个。
数据以补码的形式存放在内存中。
对于+0和-0在内存中的存储方式。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include "stdafx.h"
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
int i = +0;
int k = -0;
int *pi = &i;
int *pk = &k;
char c = '1';
char *pc = &c;
cout<<"int: "<<sizeof(int)<<" byte"<<endl;
cout<<"unsigned int: "<<sizeof(unsigned int)<<" byte"<<endl;
cout<<"float: "<<sizeof(float)<<" byte"<<endl;
cout<<"double: "<<sizeof(double)<<" byte"<<endl;
cout<<"char: "<<sizeof(char)<<" byte"<<endl;
cin.get();

return 0;
}

unsigned int

占用4个字节,即:32b,无符号位。
取值范围:0 ~ 2^32。
数据以补码的形式存放在内存中。

float

  1. 浮点数在计算机中用科学计数法表示,栗:1.0100011*2^7。
  2. 符号位:“+”或者“-”。
  3. 指数部分:2的幂指数,栗子中的“7”。
  4. 尾数部分:最高位为“1”的底数,栗子中的“10100011”。
  5. 栗子:15.987在计算机中存储方式。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    (1)15.987的整数部分原码:1111。
    (2)15.987的小数部分原码:11111100……此处省略11位。
    (3)经过上述计算,15.987的二进制为1111.11111100……,用科学计数法表示为1.11111111100……*2^3。
    (4)指数部分采用移位存储的方式,即3+(2^7-1) = 130。其二进制:10000010。
    (5)尾数部分省略科学计数法的整数部分!!(因为肯定是1)(隐藏位)
    (6)15.987在内存中的存放的内容为:
    符号位:0(共1位)。
    指数部分:10000010(共8位)。
    尾数部分:111111111000……(共23位)。
    (7)写成完整的二进制:0100 0001 0111 1111 1100 0……
    (8)写成16进制:41 7F C……。
    (9)因为Intel的架构的字节序是小端序,则真正的存放内容为……C 7F 41。

double

原理同上!

char

在内存中以ASCII码的形式存储。
栗子:
img
代码中字符是“1”,ASCII码为49,转换为16进制为31。

拓展

移位存储:
在存储浮点数时,若指数部分若不使用移位存储技术,则会导致0有两种表示方式:1000 000 0和0000 000 0。所以,为了最大化利用价值,同时保留正负性,在原数据的基础上加127,其结果如下:

1
2
0000 000 0 ~ 0111 111 1代表着 -127~0。 
1000 000 0 ~ 1111 111 1代表着 1~127。

这样正负指数均可表示的数量保持一致。