一.整数的表示

由于计算机只能识别二进制的0和1,在存储数据时就涉及到了对数据的编码问题,计算机中对整数的编码有两种不同的方式,分别为:
1. 只能表示非负数,此种类型数据称为无符号类型 即 unsigned 
2. 能表示负数0和正数,此种类型数据称为有符号类型 signed

二.整型数据类型的表示范围

C语言支持多种整型数据类型--表示有限范围的整数,
32位环境整型数据的取值范围:

C数据类型

字节数

编码方式

能表示的最小值

能表示的最大值

unsigned char

1

原码

0 (0x00)

128 (0xFF)

char

1

补码

-128 (0x80 )

127 (0x7F)

unsigned short

2

原码

0 (0x00 00)

65535(0xFFFF)

short

2

补码

-32768(0x8000)

32767(0x7FFF)

unsigned int

4

原码

(0x0000 0000)

(0xFFFF FFFF)

int

4

补码

(0x8000 0000)

(0x7FFF FFFF)

unsigned long

4

原码

(0x0000 0000)

(0xFFFF FFFF)

long

4

补码

(0x8000 0000)

(0x7FFF FFFF)

unsigned long long

8

原码

(0x0000 0000 0000 0000)

(0xFFFF FFFF FFFF )

long long

8

补码

(0x8000 0000 0000 0000 )

(0x7FFF FFFF FFFF FFFF)

32位环境的验证:

sizeof(char) = 1byte
sizeof(unsigned char) = 1byte
sizeof(short int) = 2byte
sizeof(unsigned short int) = 2byte
sizeof(int) = 4byte
sizeof(unsigned int) = 4byte
sizeof(long) = 4byte
sizeof(unsigned long) = 4byte
sizeof(long long) = 8byte
sizeof(unsigned long long) = 8byte

64位环境整型数据的取值范围:

C数据类型

字节数

编码方式

能表示的最小值

能表示的最大值

unsigned char

1

原码

0 (0x00)

128 (0xFF)

char

1

补码

-128 (0x80 )

127 (0x7F)

unsigned short

2

原码

0 (0x00 00)

65535(0xFFFF)

short

2

补码

-32768(0x8000)

32767(0x7FFF)

unsigned int

4

原码

(0x0000 0000)

(0xFFFF FFFF)

int

4

补码

(0x8000 0000)

(0x7FFF FFFF)

unsigned long

8

原码

(0x0000 0000 0000 0000)

(0xFFFF FFFF FFFF )

long

8

补码

(0x8000 0000 0000 0000 )

(0x7FFF FFFF FFFF FFFF)

unsigned long long

8

原码

(0x0000 0000 0000 0000)

(0xFFFF FFFF FFFF )

long long

8

补码

(0x8000 0000 0000 0000 )

(0x7FFF FFFF FFFF FFFF)

64位环境的验证;

sizeof(char) = 1

sizeof(unsigned char) = 1

sizeof(short int) = 2

sizeof(unsigned short int) = 2

sizeof(int) = 4

sizeof(unsigned int) = 4

sizeof(long) = 8

sizeof(unsigned long) = 8

sizeof(long long) = 8

sizeof(unsigned long long) = 8

三.无符号数的编码

计算机对无符号数的编码方式采用原码的形式,假设一个整数数据类型有 w 位。我们可以将位向量写成 x→,表示整个向量,或者写成 [xw-1 ,xw-2,…,x0],表示向量中的每一位。把 x→看做一个二进制表示的数,就获得了 x→的无符号表示。可以用一个函数 B2Uw(Binary to Unsigned)的缩写,长度为 w)来表示 :
 函数B2Uw将一个长度为w的0,1串映射到一个非负数,具体的示例如下:
B2U4([0001]) = 0 * 2^3 + 0 * 2^2 + 0 * 2^1 + 1 * 2^0 = 0 + 0 + 0 + 1 = 1
B2U4([0101]) = 0 * 2^3 + 1 * 2^2 + 0 * 2^1 + 1 * 2^0 = 0 + 4 + 0 + 1 = 5
B2U4([1011]) = 1 * 2^3 + 0 * 2^2 + 1 * 2^1 + 1 * 2^0 = 8 + 0 + 2 + 1 = 11
B2U4([1111]) = 1 * 2^3 + 1 * 2^2 + 1 * 2^1 + 1 * 2^0 = 8 + 4 + 2 + 1 = 15
无符号编码方式下w位可表示的范围:
最下值:[000......0] = 0
最大值:[111......1] = 2^w - 1;
总结:一个w位的二进制可表示的无符号类型整数的范围是0 — 2^w -1;
四. 有符号整数的编码
实际的应用中,会需要负数的值,最常用的有符号数的编码方式为补码编码,在这个定义中,将字的最高有效位解释为负权(negative weight)。我们用函数 B2Tw(Binary to Two’s-complement 的缩写,长度为 w)来表示
最高有效位 xw-1 也称为符号位,它的“权重”为 -2^(w-1),是无符号表示中权重的负数。符号位被设置为 1 时,表示值为负,而当设置为 0 时,值为非负.具体的编码示例如下:
B2T4( [0001] ) =−0* 2^3 + 0 *2^2 + 0 *2^1 +1* 2^0 = 0 + 0 + 0 + 1 = 1
B2T4( [0101] ) =−0 * 2^3 +1 *2^2 + 0 *2^1 +1* 2^0 = 0 + 4 + 0 + 1 = 5
B2T4( [1011] ) =−1 * 2^3 +0 *2^2 + 1 *2^1 +1* 2^0 = −8 + 0 + 2 + 1 = −5
B2T4( [1111] ) =−1 * 2^3 +1 *2^2 + 1 *2^1 +1* 2^0 = −8 + 0 + 2 + 1 = −1
有符号编码方式下w位可表示的范围:
让我们来考虑一下 w 位补码所能表示的值的范围。它能表示的最小值是位向量 [10…0](也就是设置这个位为负权,但是清除其他所有的位),其整数值为-2^(w-1),而最大值是位向量[01…1](清除具有负权的位,而设置其他所有的正权位)其整数值为2^(w-1);
所以范围为:-2^(w-1) ——2^(w-1);

转载于:https://www.cnblogs.com/jianghg/p/4417191.html

计算机中数据的编码方式相关推荐

  1. 【Java数据结构】计算机中数据的存储方式(为什么要使用B树)

    多路查找树 计算机的存储 内存 硬盘 硬盘基本构成 硬盘存储的优缺点 磁盘的预读 二叉树与B树 二叉树读取数据 B树读取数据 计算机的存储 计算机中的存储大致可以分为内存与硬盘存储,硬盘还能继续分为机 ...

  2. l计算机中数的表示教案,计算机组成原理电子教案-第2章 计算机中数据的表示法.ppt...

    计算机组成原理电子教案-第2章 计算机中数据的表示法 2.1.1 字符表示法 图2.1 字符串的存放 2.1.2 汉字表示法 2.2 数值数据表示法 (1)定点小数 2.浮点表示法 (2)浮点数的表示 ...

  3. opengl中的Floatbuffer和IntBuffer与java中数据的存储方式不同的解决方法,编辑一个自己的BufferUtil工具类

    opengl中的Floatbuffer和IntBuffer与java中数据的存储方式不同的解决方法,编辑一个自己的BufferUtil工具类 参考文章: (1)opengl中的Floatbuffer和 ...

  4. Matlab中数据的存储方式

    简介 MATLAB提供了丰富的算法以及一个易于操作的语言,给算法研发工作者提供了很多便利.然而MATLAB在执行某些任务的时候,执行效率偏低,测试较大任务量时可能会引起较长时间的等待.未解决这个问题, ...

  5. 计算机所有数据的表示方式都是用,计算机数据表示

    1.进制 1.1 进制的由来 进制:是一种进位的方式.x进制,表示逢x进1. 计算机的电子原件的状态:开,关. 那么,我们表达数据的时候,也是按照开,关的状态来表示的. 如果我们表达数据仅仅使用这两种 ...

  6. 图解计算机中数据的表示形式

    作者个人研发的在高并发场景下,提供的简单.稳定.可扩展的延迟消息队列框架,具有精准的定时任务和延迟队列处理功能.自开源半年多以来,已成功为十几家中小型企业提供了精准定时调度方案,经受住了生产环境的考验 ...

  7. 计算机中数据的表现形式

    计算机中存储数据和计算数据都是基于二进制来做的: 目前计算机中字符文件.图片.音频.视频等这些数据,最终都要转成二进制存储在计算机上: 码表: 存储字符和对应的数字的映射关系 ASCII码表/ISO8 ...

  8. 计算机数字表示方法有哪些,补码(计算机中数字的表示方式)

    在计算机中,使用二进制表达数字,例如,一个字节(8位)可表示的范围是0到255(在不考虑符号的情况下),即00000000到11111111. 考虑到数字有正负,我们第一时间想到,空出一位来表示符号位 ...

  9. JS 和 Java 中URL特殊字符编码方式

    前几天遇到url特殊字符编码的问题,在这里整理一下: JavaScript 1.  编码 escape(String) 其中某些字符被替换成了十六进制的转义序列. 解码 unescape(String ...

最新文章

  1. PCIE BAR空间
  2. SolrCloud7.4(Jetty容器)+mysql oracle 部署与应用
  3. IDEA配置jdk (SDK)
  4. burp的intruder报错Payload set 1: Invalid number settings
  5. 从零开始入门 K8s | K8s 安全之访问控制
  6. python如何使用字典_Python-如何使用点“。” 访问字典成员?
  7. python里面装数据库_python 安装操作 MySQL 数据库.
  8. Python一:【skimage】图像处理库的应用,不使用opencv的情况
  9. pyqt快速编程指南 源码_适合 C++ 新手学习的开源项目——在 GitHub 学编程
  10. 主题模型(Topic Model)与LDA算法
  11. Lingo建模基础入门
  12. 《Redis设计与实现》知识点目录
  13. 如何解决微图不能在虚拟机上运行的问题
  14. webmax官方动态
  15. MySQL根据输入的查询条件排序
  16. 对vue初学者建议 vue如何上手
  17. FrameBuffer操作
  18. 怎么用快捷键快速切换电脑
  19. 【数据结构】(森林)以孩子兄弟链表为存储结构,请设计递归算法求树的深度
  20. 南昌理工学院计算机科学与技术排名,南昌理工学院排名2018年下滑5名 在民办大学中实力排全国第38名...

热门文章

  1. 微信小程序开发第二弹
  2. 安装虚拟机Ubuntu,搭建lnmp环境碰到的坑(二)
  3. 【PAT (Advanced Level) Practice】1008 Elevator (20 分)
  4. 【深度学习入门到精通系列】2D Unet3D Unet辨析
  5. python隐式调用方法_Python为什么不隐式实现self
  6. web项目导入变java项目_eclipse导入web项目变成java项目解决办法
  7. 网站SEO优化可通过哪些数据分析来解决问题?
  8. 计算机设备及网络建设使用情况,高校信息化网络基础设施建设状况对比
  9. android开发实验报告二,《Android 移动应用开发》实验报告-范本2(33页)-原创力文档...
  10. 设计sample语言的词法分析器_重现木兰编程语言(十)——比较、循环,一个语法设计特色