我是靠谱客的博主 包容外套,最近开发中收集的这篇文章主要介绍计算机中数据信息的表示,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

  • 真值:真值可以理解为一个值本身真正的值

  • 机器码:一个值在计算机中的二进制表示形式,具体有原码 [ x ] 原 [x]_原 [x]、反码 [ x ] 反 [x]_反 [x]、补码 [ x ] 补 [x]_补 [x]、移码 [ x ] 移 [x]_移 [x] 这些形式

进制表示

一般书写可以在数值右下方注上基数 n 表示 n 进制

????例子

( 3235119104 ) 10 = ( 11000000110101000000000000000000 ) 2 = ( C 0 D 40000 ) 16 {(3235119104)}_{10}={(1100 0000 1101 0100 0000 0000 0000 0000)}_{2}={(C0D40000)}_{16} (3235119104)10=(11000000110101000000000000000000)2(C0D40000)16

一般书写也可以在数值末尾增添后缀表示该数值的进制

  • B:二进制(binary)
  • H:十六进制(hexadecimal)
  • D:十进制(decimal)
  • O:八进制(octal)

????例子

( 3235119104 ) D = ( 11000000110101000000000000000000 ) B = ( C 0 D 40000 ) H {(3235119104)}D={(1100 0000 1101 0100 0000 0000 0000 0000)}B={(C0D40000)}H (3235119104)D=(11000000110101000000000000000000)B(C0D40000)H

在C语言中,通过添加前缀表示数值的进制

  • 0b 或 0B:二进制(binary)
  • 0x 或 0X:十六进制(hexadecimal)
  • 0:八进制(octal)

????例子

3235119104 = 0 b 11000000110101000000000000000000 = 0 x C 0 D 40000 3235119104=0b1100 0000 1101 0100 0000 0000 0000 0000=0xC0D40000 3235119104=0b110000001101010000000000000000000xC0D40000

进制转换

十进制整数转换为二进制整数

"除 2 取余,逆序排列"法

image-20211222154928420

十进制小数转换为二进制小数

"乘 2 取整,顺序排列"法

image-20211222154940198

定点数表示

无符号数

通常只有无符号整数,没有无符号小数

????注释

如 C 语言就没有 unsigned float, unsigned double

n n n 位无符号数表示范围为 [ 0 , 2 n − 1 ] [0,2^n-1] [0,2n1]

有符号数的定点表示

真值 x x x 可以用原码 [ x ] 原 [x]_原 [x]、反码 [ x ] 反 [x]_反 [x]、补码 [ x ] 补 [x]_补 [x] 表示其对应的定点整数和定点小数

还可用移码 [ x ] 移 [x]_移 [x] 表示定点整数

image-20211221110907986

原码

原码由符号位和数值位(尾数)构成

  • 符号位用”0/1“对应”正/负“
  • 尾数表示真值的二进制绝对值

image-20211221104450868

image-20211221104033924

  • n + 1 n+1 n+1 位整数原码表示范围为 [ − ( 2 n − 1 ) , 2 n − 1 ] [-(2^n-1),2^n-1] [(2n1),2n1]
  • 真值 0 有 +0 和 -0 两种形式( [ + 0 ] 原 = 00000000 , [ − 0 ] 原 = 10000000 [+0]_原=00000000,[-0]_原=10000000 [+0]=00000000,[0]=10000000

反码

  • 正数的反码就是原码
  • 负数的反码则是在原码的基础上,符号位不动,数值位全部取反

image-20211221110234406

  • n+1 位整数反码表示范围为 [ − ( 2 n − 1 ) , 2 n − 1 ] [-(2^n-1),2^n-1] [(2n1),2n1]
  • 真值 0 有 +0 和 -0 两种形式( [ + 0 ] 原 = 01111111 , [ − 0 ] 原 = 11111111 [+0]_原=01111111,[-0]_原=11111111 [+0]=01111111,[0]=11111111

补码

  • 正数的补码就是原码
  • 负数的补码为反码 +1

image-20211221110250005

  • n+1 位整数补码表示范围为 [ − 2 n , 2 n − 1 ] [-2^n,2^n-1] [2n,2n1]
  • 真值 0 的 +0 和 -0 都是一种形式( [ + 0 ] 补 = [ − 0 ] 补 = 00000000 [+0]_补=[-0]_补=00000000 [+0]=[0]=00000000
  • 规定定点整数补码 [ x ] 补 = 10000000 [x]_补=10000000 [x]=10000000 表示 x x x 真值为 2 − 7 2^{-7} 27
  • 规定定点小数补码 [ x ] 补 = 1.0000000 [x]_补=1.0000000 [x]=1.0000000 表示 x x x 真值为 − 1 -1 1

移码

补码的基础上将符号位取反

只能用于表示整数

image-20211221111254611

计算定点小数真值的技巧

如补码 1.1001 对应真值 − 0.0111 B = − ( 2 − 2 D + 2 − 3 D + 2 − 4 D ) -0.0111B=-(2^{-2}D+2^{-3}D+2^{-4}D) 0.0111B=(22D+23D+24D)

但也可以理解为 -111B 右移 4 位,即 − 111 B = 7 2 4 D = 7 16 D -111B=frac{7}{2^4}D=frac{7}{16}D 111B=247D=167D

运算

移位

逻辑左移:整体左移,右边补 0

逻辑右移:整体右移,左边补 0

算术左移:整体左移,右边补 0

算数右移:整体右移,左边补和符号位一样的值

  • 算术左移和算术右移主要用来进行有符号数的倍增、减半
  • 逻辑左移和逻辑右移主要用来进行无符号数的倍增、减半

[ A + B ] 补 = [ A ] 补 + [ B ] 补 [ A − B ] 补 = [ A ] 补 + [ − B ] 补 [ − B ] 补 : [ B ] 补 连同符号位一起取反 + 1 {[A+B]}_{补}={[A]}_{补}+{[B]}_{补}\ {[A-B]}_{补}={[A]}_{补}+{[-B]}_{补}\ {[-B]}_{补}:{[B]}_{补}连同符号位一起取反+1 [A+B]=[A]+[B][AB]=[A]+[B][B][B]连同符号位一起取反+1

判断溢出

双符号位补码:模 4 补码

单符号位补码:模 2 补码

单符号位判断

V = A S B s S S ‾ + A S ‾ B S ‾ S S V=A_SB_soverline{S_S}+overline{A_S}overline{B_S}S_S V=ASBsSS+ASBSSS

A 符号位 A S A_S AS,B 符号位 B S B_S BS,运算结果为 S S S_S SS

V=0 表示无溢出

V=1 表示有溢出

双符号位判断

正数补码符号位负数补码符号位是 11

01 是上溢,10 是下溢

补码一位乘法

image-20220111211008335

image-20220111212003003

浮点数表示

浮点数由阶码 E(Exponent)和尾数 M(Mantissa)构成

阶码 E 是定点整数,尾数 M 是定点小数,相当于用两个定点数表示一个浮点数

  • 阶码 E 反应浮点数表示范围以及小数点实际位置
  • 尾数 M 的数值部分的位数反映浮点数的精度

浮点数的真值 N = M × r E N=M×r^E N=M×rE,r 是阶码的底,一般为 2

image-20211221163359285

  • 阶码通常用移码或补码表示
  • 尾数通常用原码或补码表示

image-20211221201838722

image-20211221201947625

浮点数的规格化

规定尾数最高数位必须是一个有效值

规格化的尾数十进制真值的范围为 0.25 ≤ M ≤ 1 0.25leq Mleq 1 0.25M1

image-20211221202501987

image-20211222152918942

image-20211221203238051

IEEE754 标准

数据类型及存储规定

image-20211221203520557

image-2021122283228

image-20211221214513963

image-20211222141515799

  • +0:所有的数据位都是 0
  • -0:最高位为1,其它的数据位是 0
  • 正/负无穷大::符号位为 0/1,阶码位全为 1,有效数字全为 0
  • NaN(Not A Number)::非法的浮点数,阶码位全为 1,有效数字不全为 0

特殊数据的相关计算规定

  • 无穷大+任何数=无穷大
  • 任何有限数÷0=无穷大
  • 任何有限数÷无穷大=0
  • 无穷大÷无穷大=NaN

最值

image-20211221214525859

C语言变量类型

C语言中没有定点小数相关的变量类型

以下是不同变量类型在不同位机下所占的大小(单位为字节)

32位机64位机
字符型 char11
短整型 short22
整型 int44
长整型 long48(4?)
长长整型 long long88
单精度浮点型 float44
双精度浮点型 double88

可通过在数值末尾添加后缀表示该数值的变量类型,对应关系如下

image-20211221195258

最后

以上就是包容外套为你收集整理的计算机中数据信息的表示的全部内容,希望文章能够帮你解决计算机中数据信息的表示所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(51)

评论列表共有 0 条评论

立即
投稿
返回
顶部