`

数据的存储与进制转换

阅读更多
一、     数据的存储原理

a)      数据在计算机中以二进制形式存储。

b)     每个二极管只有两种状态:“导”,“截止”。

c)      

二、     数据的存储单位

a)      位:又称“比特(bit)”,每个二极管元件称为一个“二进制位”,是存储信息的最小单位,值为0或1.

b)     字节:又称“拜特”。8个“二进制位”组成一组,称为“字节”,即:1 byte=8bit

c)      地址:操作系统把所有存储单元以字节为单位编号。

三、     数据进制之间的转换

a)      十进制—>二进制:

                                                                      15

                                                            2          7          1

                                                            2          3          1

                                                            2          1          1

                                                            2          0          1

     那么十进制15的二进制为:1111,因为32位整型int的长度是8位,所以前面补四个零,即:00001111



                                                       24

                                                  2   12    0

                                                  2    6     0

                                                  2     3    0

                                                  2     1    1
                                                         0

b)     二进制—>十进制



10---2:把20转换成二进制

20/2=10..........余数为0

10/2=5...........余数为0

5/2=2............余数为1

2/2=1............余数为0

1/2=0............余数为1

则20换成二进制后是10100

10---8:把20转换成八进制

20/8=2...........余数为4

2/8=0............余数为2

则20转换成八进制后是24

10---16:把20转换成十六进制

20/16=1..........余数为4

1/16=0...........余数为1

则20转换成十六进制后是14





2---10:把二进制数1101转换成十进制

1101=1*2的0次方+0*2的1次方+1*2的2次方+1*2的3次方=13

则1101变成十进制后是13





8---10:把八进制数1340转换成十进制

1340=0*8的0次方+4*8的1次方+3*8的2次方+1*8的3次方=736

则1340变成十进制后是736





16---10:把十六进制数3A4F转换成十进制

3A4F=15*16的0次方+4*16的1次方+10*16的2次方+3*16的3次方=14927

(十六进制中的A是10,F是15)





二进制与八进制的相互转换:

八进制数   0    1     2     3     4      5      6     7

二进制数 000    001  010   011    100   101    110    111





二进制与十六进制的相互转换:

十六进制   0    1     2     3     4      5      6     7     B   

二进制数 0000  0001  0010  0011  0100   0101   0110  0111  1011

c)       转换成二进制的就除以2,转换成八进制的就除以8,转换成十六进制的就除以16,然后倒取余数。

四、     sizeof

使用sizeof求存储大小,指针变量为8,数组为数组长度,字符串为实际占用大小加\0后的大小。



五、     关于size_t的解释[部分内容参见于百度知道http://baike.baidu.com/view/3236587.htm]

size_t 类型定义在cstddef头文件中,该文件是C标准库的头文件stddef.h的C++版。它是一个与机器相关的unsigned类型,其大小足以保证存储内存中对象的大小。



  例如:bitset的size操作返回bitset对象中二进制位中的个数,返回值类型是size_t。



例如:在用下标访问元素时,vector使用vector::size_type作为下标类型,而数组下标的正确类型则是size_t



size_t是标准C库中定义的,应为unsigned int,在64位系统中为 long unsigned int。



  数据类型"socklen_t"和int应该具有相同的长度,否则就会破坏 BSD套接字层的填充。POSIX开始的时候用的是size_t, LinusTorvalds(他希望有更多的人,但显然不是很多) 努力向他们解释使用size_t是完全错误的,因为在64位结构中 size_t和int的长度是不一样的,而这个参数的长度必须和int一致,因为这是BSD套接字接口标准。最终POSIX的那帮家伙找到了解决的办法,那就是创造了一个新的类型"socklen_t"。Linus Torvalds说这是由于他们发现了自己的错误但又不好意思向大家伙儿承认,所以另外创造了一个新的数据类型 。

实现方式

  在C++中,设计 size_t 就是为了适应多个平台的 。size_t的引入增强了程序在不同平台上的可移植性。size_t是针对系统定制的一种数据类型,一般是整型,因为C/C++标准只定义一最低的位数,而不是必需的固定位数。而且在内存里,对数的高位对齐存储还是低位对齐存储各系统都不一样。为了提高代码的可移植性,就有必要定义这样的数据类型。一般这种类型都会定义到它具体占几位内存等。当然,有些是编译器或系统已经给定义好的。经测试发现,在32位系统中size_t是4字节的,而在64位系统中,size_t是8字节的,这样利用该类型可以增强程序的可移植性。



使用

  一个基本的无符号整数的C / C + +类型, 它是sizeof操作符返回的结果类型, 该类型的大小是选择。因此,它可以存储在理论上是可能的任何类型的数组的最大大小。 换句话说,一个指针可以被安全地放进为size_t类型(一个例外是类的函数指针,但是这是一个特殊的情况下)。 size_t类型通常用于循环、数组索引、大小的存储和地址运算。 虽然size_t可以存储一个指针,它的目的是更好地使用另一个unsinged整数类型uintptr_t形式。 在某些情况下,使用size_t类型是更为有效,比习惯性使用无符号类型的程序员更安全。



  size_t是在基于无符号整数memsize类型的C / C + +的标准库中定义的。 C语言中,此类型位于头文件stddef.h中,而在C++中,则位于cstddef中。
分享到:
评论

相关推荐

    16进制与10进制相互转换,整型,双整型,浮点数等

    16进制与10进制数据转换工具,主要用于程序读写PLC,单片机等数据时读取的16进制数据转换成10进制的数,解决初学者的疑惑,数据在单片机或PLC中存储时是以bit、字节为单元存储的,不管是整型数还是浮点数,最终都是...

    数据结构栈实现进制的转换

    数据结构用栈实现十进制到十六进制的数据转换, 数据结构用栈实现十进制到十六进制的数据转换。

    java基础,进制转换.pdf

    二进制的转换;数据类型的由来,java的进制转换,数据的类型范围,转码,补码,反码的算法

    栈的运用:进制转换:八进制转十进制

    实验目的:1、掌握栈的逻辑结构及存储结构;...完成数字十进制到八进制的转换。 输入示例: 请输入需转换的数的个数: 3 请输入需转换的数: 28,58,190 输出示例: 转换结果为: 1、 34 2、 72 3、 276

    matlab实现从txt中读取16进制数据并转换为二进制01矩阵,处理后再转换为16进制输出到txt

    我在互联网上找了很久,发现没有人发布关于matlab从txt文档中读取16进制数转换为矩阵,再转换为2进制数矩阵,再按位拆分为01矩阵,处理完成后再转换为16进制输出的方法,这个程序也可以改写成读入十进制,输出十进制...

    链式栈的进制转换源代码

    链式栈的进制转换源代码 #define datatype int typedef struct stacknode { int num; datatype data; struct stacknode *pNext; }StackNode; StackNode * init(StackNode * phead);//初始化 StackNode * push...

    信息技术-进制转换.pptx

    计算机中的数据存储 数值型数据在计算机中如何表示? 二进制 信息技术-进制转换全文共14页,当前为第2页。 目标&重难点 1、了解进位计数的思想 2、掌握二进制、八进制、十六进制的概念 3、掌握其他进制数转换成十...

    进制转换为IEEE754数据

    本程序会将二进制转换为IEEE754格式

    浮点数与十六进制转换工具

     整型类型是将十进制转换成二进制保存在内存中,以十六进制方式显示。浮点类型并不是将一个浮点小数直接转换成二进制数保存,而是将浮点小数转换成的二进制码重新编码,再进行存储。C/C++的浮点数是有符号的。  在...

    数据结构实验-进制转换.doc

    信息学院 数据结构实验报告 "学号: "姓名: "班级: " "课程名称:数据结构 "实验名称:实现十进制实数到r进制的" " "转换(菜单可选2进制、8进制和16进 " " "制)(注意实数分为整数部分和小数 " " "部分,它们在...

    十六进制转换成相应ASCII码

    常见字符一般在计算机中是用二进制表示,在计算机中,所有的数据在存储和运算时都要使用二进制数表示(因为计算机用高电平和低电平分别表示1和0),例如,像a、b、c、d这样的52个字母(包括大写)、以及0、1等数字...

    如何将图片转换成二进制存储

    存储图片:以二进制的形式存储图片时,要把数据库中的字段设置为Image数据类型(SQL Server),存储的数据是Byte[]. 1.参数是图片路径:返回Byte[]类型: public byte[] GetPictureData(string imagepath) { /**/////...

    顺序栈、链栈将10进制转为2、8、16进制源码

    采用C++语言实现利用顺序栈、链栈将10进制数转为2、8、16进制数。 通过本编程实例,可以进一步了解到顺序栈和链栈之间区别和联系,体会两者的异同,进一步加深知识印象,是不错的练习素材哦。

    文本到二进制转换代码

    .txt文本文件中存储的是很多测量数据。一共174个被测变量,一秒钟测量一次,测量时间和测量值都存储在文本文件中。...程序的目的是将文本文件转换为二进制文件,供后续处理,比如提取某个变量,以时间为横轴画出曲线。

    winhex 16进制文件转换器 要的赶紧下

    包括 ASCII、16 进制数据 - 可进行 2 进制、16 进制 ASCII, Intel 16 进制, 和 Motorola S 转换 - 字符集: ANSI ASCII, IBM ASCII, EBCDIC, (Unicode) - 立即窗口切换、打印、生成随机数字 - 支持打开大于 4 GB 的...

    LabVIEW二进制数据存储

    利用LabVIEW读取二进制数据并存储,并且实现二进制到浮点数的转换。

    二进制XML存储方案

    其次,使用RDB还有一个问题:数据的层次表达与多值问题,将树型数据扁平化存储的方案是有的,但是,将几层简单的节点拆分成N个表格,岂不是杀鸡用牛刀? 其次的考虑当然是XML,然而XML是基于可读文本的,如何解决二...

    10进制浮点数和16进制之间转换的程序

    符合IEEE-754标准的单精度浮点形数据,C51里用4字节存储一个浮点数,如用0x3F000000表示小数0.5;0xBDCCCCCD表示小数-0.1。一般我们还是习惯用十进制来表示容易看。但有的时候我们需要知道一个十进制的小数保存到...

    非常好用的MDB二进制数据库读取解密软件

    非常好用的MDB二进制数据库读取解密软件

    图片存储到数据库保存二进制文件,并在DATAGRIDVIEW中显示出来

    图片存储到数据库保存二进制文件,并在DATAGRIDVIEW中显示出来

Global site tag (gtag.js) - Google Analytics