计算机基础:硬件编码 (二进制正反补码、大小端编码)
来源:互联网 发布:天通银交易软件 编辑:程序博客网 时间:2024/05/01 23:20
1. 计算机中采用补码的方式存储负整数
Ref 1: 原码,反码, 补码 详解
Ref 2: 为什么计算机用补码存储数据
计算机以二进制存储数字。一个数在计算机中的二进制表示形式,被称为这个数的机器数,机器数的最高位(第一位)是符号位。
E.g. 十进制中的数 +3,计算机字长为8位,转换成二进制就是00000011。如果是 -3 ,就是 10000011 。这里的 00000011 和 10000011 就是机器数。
因为机器数是有符号的,所以机器数的形式值不等于真正的数值。我们将带符号位的机器数对应的真正数值称为机器数的真值。
E.g. 0000 0001的真值 = +000 0001 = +1,1000 0001的真值 = –000 0001 = –1
对于“带符号整数”,计算机有三种二进制的编码方式:原码、反码、补码【绝对值->原码,按位求反->反码,反码加1->补码】。计算机中采用补码的方式存储负整数,原因是“方便计算”,简化硬件设计,避免0出现两个编码。
E.g. 值0的补码形式为全0,值-1的补码形式为全1。对于一个数num不管正负,都可以通过取反加以计算得补码 (-num),这样便于计算机硬件实现。用补码表示减法计算时候,a - b = a + (-b) ,-b可以通过对b按位求反加1得到。
2. 计算机中浮点数的存储
Ref 1: 浮点数的运算原理--IEEE754
Ref 2: 浮点数的二进制表示
Ref 3: IEEE浮点运算标准(中文解释pdf)
Ref 5: IEEE 754 1985vs2008对比
3.大端与小端(C语言中利用union特性可以判定大端还是小端)
大端模式 big-endian 字数据的高位字节存储在低地址, 低位字节存储在高地址
小端模式 little-endian 字数据的高位字节存储在高地址, 低位字节存储在低地址
#include <stdio.h>int main( void ){ union check{ int i; char ch; }c; c.i = 1; if( 1 == c.ch ) printf("the system is little_endian./n"); else printf("the system is big_endian./n"); return 0;}
在C语言中,不同于结构体,共用体(联合体)中的几种不同类型的变量存放在同一段内存单元中。利用这一特点,可以用联合体变量判断ARM或x86环境下,存储系统是是大端还是小端模式。
在32位机中, int - 4 bytes, char - 1 byte
1 在c中,联合体(共用体)的数据成员都是从低地址开始存放。
2 若是小端模式,由低地址到高地址c.i存放为0x01 00 00 00,c.ch被赋值为0x01;
3 若是大端模式,由低地址到高地址c.i存放为0x00 00 00 01,c.ch被赋值为0x0;
- 计算机基础:硬件编码 (二进制正反补码、大小端编码)
- 另一个视角解读计算机编码-补码编码
- 另一个视角解读计算机编码-补码编码
- 另一个视角解读计算机编码-补码编码
- 另一个视角解读计算机编码-补码编码
- 另一个视角解读计算机编码-补码编码
- 另一个视角解读计算机编码-补码编码
- 另一个视角解读计算机编码-补码编码
- 另一个视角解读计算机编码-补码编码
- 另一个视角解读计算机编码-补码编码
- 另一个视角解读计算机编码-补码编码
- 另一个视角解读计算机编码-补码编码
- 计算机数据的二进制编码(整数)
- 计算机数据的存储-编码(补码,移码)
- 【基础】二进制及编码
- 【二进制】计算机二进制补码
- 二进制(1):无符号编码和补码编码
- iso 自有 正反编码
- 想学学做手机游戏,请行内的朋友推荐两本书,请帮帮忙,谢谢了
- windows mobile 5.0 程序界面操作添加
- 高性能异步web框架Sanic文档【五】
- 新手上路了~~麻烦顶一下嘛。。。
- 请问关于从网络数据库获取数据 并显示的问题
- 计算机基础:硬件编码 (二进制正反补码、大小端编码)
- 安卓真机调试,程序没有进入到Java_org_cocos2dx_lib_Cocos2dxRenderer_nativeInit入口函数里?
- 由“虎扑体育app”的这个效果,来谈谈UITableView编辑模式
- 常用工具镜像网站又更新了#1
- 各位高手给看看这个代码做什么用的?avast报告说有病毒。
- 基础知识
- Android源码编译
- 责任链模式
- ubuntu平台下MySQL的环境搭建