数据的类型与表示

一、信息的存储单位

位(bit):度量数据的最小单位,表示1位二进制信息;

字节(Byte):一个字节由8位二进制数据组成;字节是信息存储中最常用的基本单位,计算机的存储器(包括内存与外存)通常也是以多少字节来表示它的容量;

1Byte=8bit

1K=1024B

1M=1024K

1G=1024M

字(Word):字是位的组合,作为一个独立的信息单位处理;字又称为计算机字,它的含义取决于机器的类型、字长以及使用者的要求;常用的固定字长有8位、16位、32位等;

机器字长:一般指参加运算的存储器所含有的二进制数的位数,代表了机器的精度,如32位、64位等;

二、数据类型

1、字符类型--char

共包含256个不同的数值,每个数值可以用来代表一个字符(如‘a‘、‘+‘、‘Z‘、‘#‘等);ASCII码表记录所有字符数值两个身份之间的对应关系:

0--48、A--65、a--97

2、无符号字符类型--unsigned char

‘\n‘--换行

‘\r‘--回车符(把打印位置调整到行开头)

‘\t‘--制表符(多行打印时所需对齐的内容上下对齐)

‘\\‘--表示\

‘\"‘--表示"

‘\‘‘--表示‘

3、短整数类型--short

包含65536个不同的整数,范围从-32768到32767

4、无符号短整数--unsigned short

范围从0~65535

5、长整数类型--long/long int

包含232个不同的整数,范围从-2----31~231-1

6、无符号长整数--unsigned long/unsigned long int

范围从0~232-1

7、整数类型--int

8、无符号整数--unsigned int

9、浮点类型--float/double

单精度浮点类型(float)能记录的小数点后的数位较少,双精度浮点类型(double)能记录的小数点后的位数较多;

10、布尔值--bool

0--false  1--true

11、不同数据类型所包含的字节数不同:

char(unsigned char)  --一个字节

short(unsigned short)  --两个字节

int(unsigned int)  --四个字节

long(unsigned long)  --四个字节

float  --四个字节

double  --八个字节

三、数据类型和占位符的对应关系

每个占位符必须有一个数值和它对应,数值按照从前向后的顺序依次替换所有的占位符:

printf("%d+%d=%d\n",num01,num02,num03);

char                        %c和%hhd

unsigned char          %c和%hhu (%c对应字符身份,%hhd和%hhu对应数字身份)

short                      %hd

unsigned short        %hu

long                        %ld

unsigned long          %lu

int                          %d

unsigned int            %u

float                       %f或%g

double                    %lf或%lg (%f和%lf会保留小数点后无效的0,%g和%lg不会保留)

字符串                     %s

%nd--可作为占位符打印整数,其中n为一个数字,该占位符要求打印结果在屏幕上一定占有n个位置;

%-nd--作占位符要求有效数字出现在n个位置的左边;

%0nd--作占位符打印时空出来的位置填字符0;

%n.mf--作占位符可以打印浮点数据,整个打印结果一共占n个位置,其中小数点后面的部分占m个位置;

%x/%X--将一个整数的十六进制表示形式打印在屏幕上;%x打印的字母是小写的,%X打印的字母是大写的;

四、进位计数之间的转换

1、二进制<-->十进制

二进制转换为十进制:

    把二进制表示方式中的所有的1对应的数字找出来,然后求和就得到所对应的十进制表示方式

    (0110 1010)2-->21+23+25+26=(106)10

    (111.11)2-->22+21+20+2-1+2-2=(7.75)10

        十进制转换为二进制:

 将十进制数字不断地进行除2取余的操作直至为0止,然后将操作所得的余数由下至上依次从左(高位)向右(低位)写下来,最后不是8位数位的用0补齐,即为对应的二进制

  (91)10=(0101 1011)2

  (68)10=(0100 0100)2

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

将十进制的小数连续地乘2,得到的整数部分即组成二进制小数

(0.3125)10=(0.0101)2

0.3125 x 2 = 0.625

0.625  x 2 = 1.25

0.25   x 2 = 0.5

0.5    x 2 = 1.0

(68.3125)10=(1000100.0101)2

分别进行整数部分和小数部分的转换,然后再拼在一起

2、八进制<-->十进制

八进制转换为十进制:

(3506.2)8=3x83+5x82+0x81+6x80+2x8-1=(1862.25)10

十进制转换为八进制:

除8取余

   (168)10=(250)8

3、十六进制<-->十进制

十六进制转换为十进制:

(0.2A)16=2x16-1+10x16-2=(0.1640625)10

十进制转换为十六进制:

除16取余

(168)10=(A8)16

4、二、八、十六进制的相互转换

(01101101)2=001 101 101=20 22+20 22+20=(155)8

(1000100)2=0100 0100=22 22=(44)16=0x44

(1011010.10)2=001 011 010 . 100=20 21+20 21 . 22=(132.4)8

(1011010.10)2=0101 1010 . 1000=22+20 23+21 . 23=(5A.8)16

(F)16=(15)10=(1111)2

(F7)16=(1111 0111)2

五、二进制的编码表示

1、原码

X=+0101011 -- [X]=00101011

X=-0101011 -- [X]=10101011

X=0.1011 -- [X]=0.1011

X=-0.1011 -- [X]=1.1011

2、反码

正数的反码与原码表示相同;负数反码的符号位与原码相同,其余各位取反;

X=+1100110 -- [X]=01100110 -- [X]=01100110

X=-1100110 -- [X]=11100110 -- [X]=10011001

X=0.1011 -- [X]=0.1011 -- [X]=0.1011

X=-0.1011 -- [X]=1.1011 -- [X]=1.0100

3、补码

正数的原码、反码、补码形式相同;负数的补码由该数的反码的最末位加1求得;

求X=-1010101的补码:

    [X]=11010101 -- [X]=10101010 -- [X]=10101011

求X=-0.1011的补码:

  [X]=1.1011 -- [X]=1.0100 -- [X]=1.0101

注意:二进制在进行+1操作时,须遵循以下方法:

①当二进制的最右边数位为0时,直接将该数位改为1,即完成+1操作;

②当二进制的最右边数位为1时,将二进制从右向左的连续多个1改成0,将遇到的第一个0变成1;

时间: 2025-01-02 15:57:47

数据的类型与表示的相关文章

MySQL学习笔记(6)之数据定义类型

数据定义类型总汇 1.整数型: 整数类型 字节 有符号范围 无符号范围 用途 tinyint 1 (-128,127) (0,255) 小整数 smallint 2 (-32 768,32 767) (0,65 535) 大整数 mediumint 3 (-8 388 608,8 388 607) (0,16 777 215) 大整数 int或integer 4 (-2 147 483 648,2 147 483 647) (0,4 294 967 295) 超大整数 bigint 8 (-9 

MySQL学习笔记(7)之数据定义类型

数据定义类型总汇 1.整数型: 整数类型 字节 有符号范围 无符号范围 用途 tinyint 1 (-128,127) (0,255) 小整数 smallint 2 (-32 768,32 767) (0,65 535) 大整数 mediumint 3 (-8 388 608,8 388 607) (0,16 777 215) 大整数 int或integer 4 (-2 147 483 648,2 147 483 647) (0,4 294 967 295) 超大整数 bigint 8 (-9 

C# Json反序列化 数据协定类型 无法反序列化 由于未找到必需的数据成员

背景今天在使用:C# Json 序列化与反序列化 反序列化的时候出现了以下的错误信息. System.Runtime.Serialization.SerializationException: 数据协定类型"TestEntity"无法反序列化,由于未找到必需的数据成员"multipleChoice, runTimeDisplayColumns". 在 System.ComponentModel.ReflectPropertyDescriptor.SetValue(O

addScalar 显式指定返回数据的类型

sql: select a.id as 受理 from a SQLQuery sqlQuery=this.getSession().createSQLQuery(sb.toString()).addScalar("appId",Hibernate.STRING).addScalar("受理",Hibernate.INTEGER); 注:一旦使用addScalar,所有的属性都得用上. addScalar 显式指定返回数据的类型

iOS数据存储类型 及 堆(heap)和栈(stack)

iOS数据存储类型 及 堆(heap)和栈(stack) 一般认为在c中分为这几个存储区: 1栈 --  由编译器自动分配释放. 2堆 --  一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收. 3全局区(静态存储区)-- 全局变量和静态变量的存储是放在一块区域 ,程序退出后自动释放 .全局区又分为全局初始化区和全局未初始化区.初始化的全局变量和静态变量存放在全局初始化区,未初始化的全局变量和未初始化的静态变量存放在相邻的另一块区域. 4常量区-- 专门放数字/字符常量的地方, 程

如何正确选择MySQL数据列类型

MySQL数据列类型选择是在我们设计表的时候经常会遇到的问题,下面就教您如何正确选择MySQL数据列类型,供您参考学习. 选择正确的数据列类型能大大提高数据库的性能和使数据库具有高扩展性.在选择MySQL数据列类型时,请从以下几个方面考虑: 存放到数据列中的数据类型. 数据值的取值范围. 考虑性能和处理效率. 数值操作比字符操作快. 小类型的处理速度比大类型快. 不同数据表中固定长度类型和可变长度类型的处理效率是不同的. 可变长度类型在经过删除和修改操作后容易产生碎片,降低系统性能,需定期运行O

MySQL数据表类型 数据类型

来源:http://blog.chinaunix.net/uid-10064369-id-2971161.html 表类型 MySQL的数据表类型很多,其中比较重要的是MyISAM,InnoDB这两种. 这两种类型各有优缺点,需要根据实际情况选择适合的,MySQL支持对不同的表设置不同的类型.下面做个对比: MyISAM表类型是一种比较成熟稳定的表类型,但是MyISAM对一些功能不支持.    MyISAM  InnoDB 事务  不支持  支持 数据行锁定  不支持,只有表锁定  支持 外键约

ospf的5种数据包类型

OSPF的数据包格式: 根据OSPF数据包type字段数值的不同,OSPF数据包类型分为5种,不同的type,其后面的内容也不同. 路由表的形成与这5种数据包的交互息息相关. type=1    hello数据包 type=2    数据库描述包--DBD type=3    链路状态请求包---LSR type=4    链路状态更新包---LSU type=5    链路状态确认包---LSAck 1.hello包-----周期10s 编号为1的OSPF数据包 功能:用于发现,和维持邻居关系

C++的那些事:数据与类型

一.前言 最近在看C++Primer第5版,先前已经看过第4版,但是发现第5版在整个知识布局与个别知识的讲解上跟第4版差别还是挺大的,尤其是新增了C++11的内容,正如孟岩老师在第5版前言中所讲:"现在能够以新的C++11风格开发实践的人是凤毛麟角,如果能够纯熟的运用C++11的新特征.新机制,那么就能够形成一种简洁优雅的C++编程风络,开发会变得更高效,更高质". 所以正好借助第5版来重新学习巩固C++的知识.<C++的那些事>这个系列,将会以知识碎片的形式记录我在学习过

可以发送的数据的类型

channel是不同的goroutine之间的通信机制. 一个goroutine通过channel给另外一个goroutine发送信息. 每个channel 都有一个特殊的类型,也就是channel可以发送的数据的类型 我们可以通过make创建一个channel如: ch := make(chan int)  这就是创建了一个类型为int的channel 默认我们这样创建的是无缓存的channel,当然我们可以通过第二个参数来设置容量 ch := make(chan int,10) http:/