当前位置: 首页 > news >正文

自字网站建设教程百度网盟推广官网入口

自字网站建设教程,百度网盟推广官网入口,wordpress主题ftp失败,上海营销型网站建设团队目录 1. 数据类型介绍 1.1 类型的基本归类#xff1a; 2. 整形在内存中的存储 2.1 原码、反码、补码 2.2 大小端介绍 2.3 练习 3. 浮点型在内存中的存储 3.1 一个例子 3.2 浮点数存储规则 1. 数据类型介绍 char // 字符数据类型 short // 短整… 目录 1. 数据类型介绍 1.1 类型的基本归类 2. 整形在内存中的存储  2.1 原码、反码、补码 2.2 大小端介绍 2.3 练习   3. 浮点型在内存中的存储  3.1 一个例子   3.2 浮点数存储规则   1. 数据类型介绍 char         // 字符数据类型 short       // 短整型 int         // 整形 long         // 长整型 long long   // 更长的整形 float       // 单精度浮点数 double       // 双精度浮点数 //C 语言有没有字符串类型 类型的意义 1. 使用这个类型开辟内存空间的大小大小决定了使用范围。 2. 如何看待内存空间的视角。 1.1 类型的基本归类 整形家族 char         unsigned char  //只放正数         signed char   //放正数和负数 //字符存储和表示的时候本质上使用的是ASCII值ASCII值是整数字符类型也归类到整型家族 平时我们用的int相当于是signed int可以省略掉signed。 short         unsigned short [ int ]         signed short [ int ] int         unsigned int         signed int long         unsigned long [ int ]         signed long [ int ] 浮点数家族 float double 构造类型自定义类型 数组类型 结构体类型 struct 枚举类型 enum 联合类型 union 指针类型 int * pi ; char * pc ; float* pf ; void* pv ; 空类型  void 表示空类型无类型 通常应用于函数的返回类型、函数的参数、指针类型。 void test(...)//函数不需要返回值 {} void test(void)//函数不需要参数 {} void* p;//无具体类型指针 2. 整形在内存中的存储  我们之前讲过一个变量的创建是要在内存中开辟空间的。空间的大小是根据不同的类型而决定的。 那接下来我们谈谈数据在所开辟内存中到底是如何存储的  比如  int a 20 ; int b - 10 ; 我们知道为 a 分配四个字节的空间。 那如何存储 下来了解下面的概念 2.1 原码、反码、补码 计算机中的整数有三种 2 进制表示方法即原码、反码和补码。 三种表示方法均有 符号位 和 数值位 两部分符号位都是用 0 表示 “ 正 ” 用 1 表示 “ 负 ” 而数值位 正数的原、反、补码都相同。 负整数的三种表示方法各不相同。 原码 直接将数值按照正负数的形式翻译成二进制就可以得到原码。 反码 将原码的符号位不变其他位依次按位取反就可以得到反码。 补码 反码 1 就得到补码。 对于整形来说数据存放内存中其实存放的是补码。 为什么呢 在计算机系统中数值一律用补码来表示和存储。原因在于使用补码可以将符号位和数值域统 一处理 同时加法和减法也可以统一处理CPU 只有加法器 此外补码与原码相互转换其运算过程是相同的不需要额外的硬件电路。 我们看看在内存中的存储 我们可以看到对于 a 和 b 分别存储的是补码。但是我们发现顺序有点 不对劲 。 这是又为什么这又涉及到了大小端往下看~ 2.2 大小端介绍 什么大端小端 大端存储模式是指数据的低位保存在内存的高地址中而数据的高位保存在内存的低地址 中 小端存储模式是指数据的低位保存在内存的低地址中而数据的高位 , 保存在内存的高地 址中。 为什么有大端和小端 为什么会有大小端模式之分呢这是因为在计算机系统中我们是以字节为单位的每个地址单元都对应着一个字节一个字节为8 bit 。但是在 C 语言中除了 8 bit 的 char 之外还有 16 bit 的 short 型32 bit 的 long 型要看具体的编译器另外对于位数大于 8 位的处理器例如 16 位或者 32 位的处理器由于寄存器宽度大于一个字节那么必然存在着一个如何将多个字节安排的问题。因 此就导致了大端存储模式和小端存储模式。 例如一个 16bit 的 short 型 x 在内存中的地址为 0x0010 x 的值为 0x1122 那么 0x11 为高字节0x22 为低字节。对于大端模式就将 0x11 放在低地址中即 0x0010 中 0x22 放在高 地址中即 0x0011 中。小端模式刚好相反。我们常用的 X86 结构是小端模式而 KEIL C51 则 为大端模式。很多的ARM DSP 都为小端模式。有些 ARM 处理器还可以由硬件来选择是大端模式还是小端模式。 百度2015年系统工程师笔试题 请简述大端字节序和小端字节序的概念设计一个小程序来判断当前机器的字节序。 10 分 // 代码 1 #include stdio.h int check_sys () { int i 1 ; return ( * ( char * ) i ); } int main () { int ret check_sys (); if ( ret 1 ) { printf ( 小端 \n ); } else { printf ( 大端 \n ); } return 0 ; } // 代码 2 int check_sys () { union { int i ; char c ; } un ; un . i 1 ; return un . c ; } 2.3 练习   1. // 输出什么 #include stdio.h int main () { char a - 1 ; //10000000000000000000000000000001 //11111111111111111111111111111110 //11111111111111111111111111111111 //11111111 - 截断 //整型提升 - 按照符号位提升 //11111111111111111111111111111111 //11111111111111111111111111111110 - 减1 //10000000000000000000000000000001 signed char b - 1 ; unsigned char c - 1 ; //1000000000000000000000000000001 //11111111111111111111111111111110 //11111111111111111111111111111111 //11111111 - 如果是无符号数高位直接补0 //00000000000000000000000011111111换成十进制为255 //补完0后 最高位的符号位是0 所以原、反、补码相同 printf ( a%d,b%d,c%d , a , b , c ); return 0 ; } 结构为a -1 b -1 c 255 下面程序输出什么 2. #include stdio.h int main () { char a - 128 ; printf ( %u\n , a ); return 0 ; } //10000000000000000000000010000000 - 原码 //11111111111111111111111101111111 - 反码 //11111111111111111111111110000000 - 补码 //10000000 - a 截断 ——整型提升 补 1 //11111111111111111111111110000000 //%u打印 认为打印补码 对于无符号数来说 原反补相同 所以直接打印转换成了十进制打印了42亿多 3. #include stdio.h int main () { char a 128 ; printf ( %u\n , a ); return 0 ; }  和上一道一模一样 因为截断那里一样 都是补 1 4. int i - 20 ; unsigned   int   j 10 ; printf ( %d\n , i j ); // 按照补码的形式进行运算最后格式化成为有符号整数 详解 //10000000 00000000 00000000 00010100 负20的原码 //11111111  11111111  11111111 11101011 负20的反码符号位不变其他取反 //11111111 11111111 11111111 11101100 负20的补码反码加1得到补码 //00000000 00000000 00000000 00001010 10的原码正数的原反补码相同 //11111111 11111111 11111111 11110110 -20和10的补码相加 //计算机的结果是存在内存中的是补码 //11111111 11111111 11111111 11110101 减1 //10000000 00000000 00000000 00001010 取反得到了-10 5. unsigned int i ; for ( i 9 ; i 0 ; i -- ) { printf ( %u\n , i ); } //-1的原 反 补 //10000000000000000000000000000001 原 //11111111111111111111111111111110 反 //11111111111111111111111111111111 补 //当循环i--到0再减一次得到的是-1而-1的补码是11111111111111111111111111111111计算机会认为它是个很大的数所以一直循环。  %u打印无符号数 但是我换成%d就可以打印-1了 6. int main () { char a [ 1000 ]; int i ; for ( i 0 ; i 1000 ; i )   { a [ i ] - 1 - i ;   } printf ( %d , strlen ( a )); return 0 ; } //-1 -2 -3 -4...-127...-998 -999 -1000     //char -1 -2 -3...-128 127 126...3 2 1...0 -1 -2...-128 127 //strlen 求字符串长度找的是\0, \0的ASCII码值是0 所以算char的长度算到0会停止所以128127255 结果会打印225 char 类型的取值范围是 -128~127 7. #include stdio.h unsigned char i 0 ; //0~255 int main () { for ( i 0 ; i 255 ; i )   { printf ( hello world\n ); //十进制的256转换成二进制为1 00000000取后面八位不就是变成0了吗所以i255这个条件恒成立所以死循环   } return 0 ; } 所以结果为死循环打印hello world 3. 浮点型在内存中的存储  常见的浮点数: 3.14159 1E10 浮点数家族包括 float 、 double 、 long double 类型。 浮点数表示的范围 float.h 中定义 3.1 一个例子   浮点数存储的例子 int main () { int n 9 ; float * pFloat ( float * ) n ; printf ( n 的值为 %d\n , n ); printf ( *pFloat 的值为 %f\n , * pFloat ); * pFloat 9.0 ; printf ( num 的值为 %d\n , n ); printf ( *pFloat 的值为 %f\n , * pFloat ); return 0 ; } n的值为9——是以整型的形式打印 *pFloat的值为0.000000——以浮点数的形式拿出来拿到的不是9.0说明整型的存储形式和浮点数的存储形式有所差异 下面两个同理再次验证了整型的存储形式和浮点数的存储形式有所差异 。 输出的结果是什么呢 3.2 浮点数存储规则   num 和 *pFloat 在内存中明明是同一个数为什么浮点数和整数的解读结果会差别这么大 要理解这个结果一定要搞懂浮点数在计算机内部的表示方法。 详细解读 根据国际标准 IEEE 电气和电子工程协会 754 任意一个二进制浮点数 V 可以表示成下面的形式 (-1)^S * M * 2^E (-1)^S表示符号位当S0V为正数当S1V为负数。 M表示有效数字大于等于1小于2。 2^E表示指数位。举例5.5 用二进制表示形式 —— 如图原理 5.5 转换成 101.1   科学计数法1.011*2^2   举例来说 十进制的 5.0 写成二进制是 101.0 相当于 1.01×2^2 。 那么按照上面 V 的格式可以得出 S0 M1.01 E2 。 十进制的 -5.0 写成二进制是 - 101.0 相当于 - 1.01×2^2 。那么 S1 M1.01 E2 。 IEEE 754 规定 对于 32 位的浮点数最高的 1 位是符号位 s 接着的 8 位是指数 E 剩下的 23 位为有效数字 M 。 对于64位的浮点数最高的1位是符号位接着的11位是指数E剩下的23位为有效数字M。 IEEE 754 对有效数字 M 和指数 E 还有一些特别规定。 前面说过 1≤M2 也就是说 M 可以写成 1.xxxxxx 的形式其中 xxxxxx 表示小数部分。 IEEE 754 规定在计算机内部保存 M 时默认这个数的第一位总是 1 因此可以被舍去只保存后面的xxxxxx部分。 比如保存 1.01 的时候只保存01 等到读取的时候再把第一位的 1 加上去。这样做的目的是节省 1 位有效数字。以 32 位 浮点数为例留给M 只有 23 位 将第一位的1 舍去以后等于可以保存 24 位有效数字。 至于指数 E 情况就比较复杂。下 首先 E 为一个无符号整数 unsigned int 这意味着如果 E 为 8 位它的取值范围为 0~255 如果 E 为 11 位它的取值范围为 0~2047 。但是我们 知道科学计数法中的E 是可以出现负数的所以IEEE 754 规定存入内存时 E 的真实值必须再加上一个中间数对于 8 位的 E 这个中间数 是127 对于 11 位的 E 这个中间 数是1023 。比如 2^10 的 E 是 10 所以保存成 32 位浮点数时必须保存成 10127137 即 10001001。 然后指数 E 从内存中取出还可以再分成三种情况 E 不全为 0 或不全为 1 这时浮点数就采用下面的规则表示即指数 E 的计算值减去 127 或 1023 得到真实值再将 有效数字 M 前加上第一位的 1 。 比如 0.5 1/2 的二进制形式为 0.1 由于规定正数部分必须为 1 即将小数点右移 1 位则为 1.0*2^(-1) 其阶码为 -1127126 表示为 01111110 而尾数 1.0 去掉整数部分为 0 补齐 0 到 23 位 00000000000000000000000 则其二进 制表示形式为 : 0 01111110 00000000000000000000000 E全为0 这时浮点数的指数 E 等于 1-127 或者 1-1023 即为真实值 有效数字 M 不再加上第一位的 1 而是还原为 0.xxxxxx 的小数。这样做是为了表示 ±0 以及接近于 0 的很小的数字。 E全为1 这时如果有效数字 M 全为 0 表示 ± 无穷大正负取决于符号位 s 好了关于浮点数的表示规则就说到这里。 解释前面的题目 int main() { int n 9; float *pFloat (float *)n; printf(n的值为%d\n,n); printf(*pFloat的值为%f\n,*pFloat); *pFloat 9.0; printf(num的值为%d\n,n); printf(*pFloat的值为%f\n,*pFloat); return 0; } 下面让我们回到一开始的问题为什么 0x00000009 还原成浮点数就成了 0.000000 首先将 0x00000009 拆分得到第一位符号位 s0 后面 8 位的指数 E00000000 最后 23 位的有效数字 M000 0000 0000 0000 0000 1001 。 9 - 0000 0000 0000 0000 0000 0000 0000 1001   由于指数E全为0所以符合上一节的第二种情况。因此浮点数V就写成 V(-1)^0 × 0.00000000000000000001001×2^(-126)1.001×2^(-146)   显然V是一个很小的接近于0的正数所以用十进制小数表示就是0.000000。   再看例题的第二部分。 请问浮点数 9.0 如何用二进制表示还原成十进制又是多少 首先浮点数 9.0 等于二进制的 1001.0 即 1.001×2^3 。 9.0 - 1001.0 - ( - 1 ) ^01 . 0012 ^3 - s 0 , M 1.001 , E 3 127 130 那么第一位的符号位 s0 有效数字 M 等于 001 后面再加 20 个 0 凑满 23 位指数 E 等于 3127130 即 10000010 。 所以写成二进制形式应该是 sEM 即 0 10000010 001 0000 0000 0000 0000 0000 这个32位的二进制数还原成十进制正是 1091567616 。   THE END 这是今日份关于数据存储的一些分享希望可以帮助到大家如果有什么不足的地方也请家人们给小叶一些好的建议我会不断优化文章的那就让我们一起加油吧哈哈哈哈哈
http://www.sadfv.cn/news/270429/

相关文章:

  • 网站建设最流行语言wordpress二维码 插件下载地址
  • 武夷山网站定制做网站有哪些类型
  • wordpress自带图片大小站长工具seo综合查询是什么意思
  • 怎么给网站做关键词网站推广策划的策略
  • 前端怎么做电商网站公司网站 钓鱼网站
  • 建设银行舒城支行网站深圳网站和app建设方案
  • 关键词网站推广湖北德升建站
  • 丹东电信网站备案宁波网络营销推广制作
  • 网站建设信(信科网络)全国私人订制平台
  • 企业建站域名代刷网站推广链接0元价格
  • 门户网站建设投资《网站推广策划》
  • 网站照片上传不了怎么办大二网页设计作业
  • dede 中英文网站郴州做网站ku0735
  • 怎样做才能让网站帮忙送东西wordpress layer
  • 网站架构的组成部分网站大全免黄
  • 建设网站详细流程图杭州关键词排名系统
  • 0建设营销型网站步骤欧美模板网站
  • 做宣传语的网站wordpress首页显示文章列表
  • 象山县建设局网站餐饮营销型网站建设
  • 自己做动漫 哪个网站赚钱西安网页开发公司
  • 企业销售网站建设wordpress 不能选择数据库
  • 杭工e家app是哪个网站做的网站指向错误
  • 建筑工程网站开发网址创作
  • 社保网站是每月1-6号都是在建设中的吗怎么快速优化网站排名
  • 企业网站建设的目的有哪些怎么做视频网站首页
  • 重庆网站建设的目的如何拥有自己的专属域名
  • 如何建好一个网站网页打不开但是有网什么原因无法显示此网页
  • 上传电影网站源码外链吧怎么使用
  • 旅游网站网页设计模板代码交换友情链接是什么意思
  • 网站开发网站页面视频网站怎么做的反爬虫