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

学习html的网站深圳网站制作的公司哪家好

学习html的网站,深圳网站制作的公司哪家好,电脑如何做ppt模板下载网站,查国外网站备案C语言#xff1a;数据在内存中的存储 整数存储原码、反码、补码转换规则数据与内存的关系 大小端字节序浮点数存储IEEE 754标准存储过程取用过程 数据的存储范围 整数存储 原码、反码、补码 整数的2进制表示方法有三种#xff0c;即原码、反码和补码 三种表示方法均有符号位… C语言数据在内存中的存储 整数存储原码、反码、补码转换规则数据与内存的关系 大小端字节序浮点数存储IEEE 754标准存储过程取用过程 数据的存储范围 整数存储 原码、反码、补码 整数的2进制表示方法有三种即原码、反码和补码 三种表示方法均有符号位和数值位两部分符号位用0表示“正”用1表示“负”。 有符号整数最高位的一位是被当做符号位剩余的都是数值位。 无符号整数所有的位都是数值位 转换规则 正整数的原、反、补码都相同。 负整数的三种表示方法各不相同。 原码直接将数值按照正负数的形式翻译成二进制得到的就是原码。 反码将原码的符号位不变其他位依次按位取反就可以得到反码。 补码反码1就得到补码。 正数 对于int整形计算机会给内存开辟4个字节即32个比特来存放a。由于在此a是正数第一位符号位为0数值为5转化为二进制就是101存在最后。正数的原反补三码相同。 负数 由于在此a是负数在原码中第一位是符号位存放1。 反码符号位不变保持为1。其余位按位取反即0变11变0. 补码在反码的情况下加1。 而补码想要变回原码也是相同的步骤即先取反后加一。 数据与内存的关系 首先我们在内存中存储的数据是以补码的形式存储的。我们用代码定义ab为5和-5然后观察其在内存中的值 由于二进制实在难于分辨所以编译器在向程序员呈现计算机存储的值的时候会转为16进制。我们从上图中可见a的存储是可以理解的可b的值却不是-00000005。这个fffffffb其实就是-5的补码的16进制形式由此可以证明内存存储数据就是以补码的形式。 那为什么内存要存补码 可以把符号与数值统一处理把数字的正负放在码值中不用额外区分。可以使加法减法统一处理CPU只有加法计算器。 第一点其实是容易理解的那为什么用补码可以统一加减法呢我们以下面的代码为例 以上代码中计算机想要完成3 - 5于是CPU将其转化为了3 -5然后直接将补码相加然后转回原码得到的就是正确答案。 可见虽然代码是减法但是在计算机处理的时候只做了加法运算。这样可以减少计算机硬件的消耗只需要在CPU内部做好加法的硬件即可。 大小端字节序 讲完整数的存储后我提出一个新的问题int类型占用四个字节请问这四个字节在内存中是从高到低还是从低到高存储这就涉及到了大小端字节序的问题。 int a 0x11223344;变量a是十六进制的11223344十六进制转二进制每一位数字转为四位二进制所以每两个十六进制数字占一个字节。上述代码中11223344各占一个字节。当一个变量占用多个字节字节会区分高位与低位 11为高位字节序 44为低位字节序 而在内存中一个变量的多个字节有两种存储顺序 大端字节序将一个数值的低位字节序存储到内存的高地址处 小端字节序将一个数值的低位字节序存储到内存的低地址处 值得注意的是大小端字节序并不取决于编译器而取决于计算机的硬件实现。 接下来我们设计一个程序来检测我们的计算机是大端字节序还是小端字节序 大小端存储是发生在一个变量同时占用多个字节的情况下的想要检测计算机的大小端那就需要在一个变量内部区分出高地址与低地址。 而指针就有这个特性指向某个变量的指针其地址为该变量所有地址中最低的那个地址这样我们把一个指向占用多个字节变量的指针强制转化为char*指针就可以访问到其最低位的地址了。 代码如下 int a 1; char* pa (char*)a;if (*pa 0)printf(大端字节序\n); else if (*pa 1)printf(小端字节序\n);以上代码中我们定义了一个a 1那么a的十六进制就是0x 00 00 00 01其低位字节序为01高位字节序为00。我们利用char*指针取到低地址处的变量后如果低地址为00说明高位存储在了低地址是大端字节序如果低地址为01说明低位存储在了低地址是小端字节序。 浮点数存储 IEEE 754标准 在C语言中浮点数的存储是基于IEEE 754标准来实现的。 IEEE 754规定任何一个二进制浮点数V都可以存储为以下形式 V (-1)s × M × 2E (-1)s表示符号位当S 0 V为正数S 1 V为负数M表示有效数字1 M 22E表示指数位 接下来我详细讲解一下这套规则 S这个很好理解即用于控制浮点数的正负 M 一个二进制的浮点数其一定由0与1构成比如1011.0101这个浮点数为了统一处理我们将所有浮点数的最左位1放在小数点左边其余位放在小数点右边。 以下是一些示例 1011.0101 - 1.0110101 0.00001011 - 1.011 1111111.11111 - 1.11111111111 0.0001 - 1.0 在这种转化下M一定是1.xxxxx所以有1 M 2。 E 经过上述转化那就会发生小数点的偏移为了矫正这个偏移量于是存在了E。 比如1011.0101 - 1.0110101这个过程其小数点偏移了三位那就有1011.0101 1.0110101 * 2 ^ 3此时E就表示2的指数E 3。 再比如0.00001011 - 1.0110.00001011 1.011 * 2 ^ (-5)此时E -5。 理解了这套规则后我们尝试转化一个数字-5.0 -5.0为负数所以S 1 5.0转化为二进制为101.0 小数点左移两位101.0 - 1.01故M 1.01E 2 综上-5.0 -101.0 (-1)1 × 1.01 × 22 存储过程 知道了浮点数的存储规则后我们再看看这个数据是如何存放在内存中的。 想要存储一个浮点数经过上述转换规则也就是要存储SME三个数据。 对于单精度浮点数float第一位分配给S为E分配了8个bit位M分配了23个bit位 对于双精度浮点数double第一位分配给S为E分配了11个bit位M分配了52个bit位 S 直接判断浮点数正负然后在第一位存入0 / 1 即可 M 先前我们强调过1.0 M 2即M一定是1.xxx的形式所以小数点前第一位一定是1所以可以省略掉M的第一位1只存储小数点后面的数字。比如保存 1.01 只存储 01小数点前的1被省略了 E 对于float而言其分配了8位bit存储E所以E的存储范围是[0, 255]。但是科学计数法中指数可以为负数所以不能从0开始存储于是给出一个中间数用于调节正负。存入之前先加上一个中间数保证所有的E都被转化为正数当取出E使用的时候再减去中间数 float的中间数是127比如我们的E -9那么存储进内存的时候实际存储的是-9 127 118如果E 20存储进内存的时候实际存储的是20 127 147。所以E的实际存储范围是[-127, 128] double同理其中间数是1023存入数据前要先加上这个中间数 取用过程 将浮点数从内存中取出来其实就是以上过程的逆过程 先取出SME 取M时取到的是小数点后的数据要再在小数点前面加上1 比如从内存中取到的数据为101101那么M 1.101101取E时要减掉中间数 比如取到的数据为130那么E 130 -127 3 根据 V (-1)s × M × 2E 计算得到浮点数 以上是一般情况的取用但是还有两种特殊情况 当E为全0 表⽰±0以及接近于0的很⼩的数字。 当E为全1 这时如果有效数字M全为0表⽰±⽆穷⼤正负取决于符号位s 数据的存储范围 此处以signed char为例intlong等以此类推即可。 我们首先列举一下signed char类型可能存在的码值 0000 0000(0) 0000 0001(1) ...... 0111 1111(127) 1000 0000(?) 1000 0001(-127) ...... 1111 1110(-2) 1111 1111(-1)以上列举中以4bit为一单位共8bit即1字节。根据原码与补码的转化以上规则应该十分清晰唯一的问题就是1000 0000是什么 先根据一般的转化规则 1000 0000以1开头说明这是一个负数转原码需要取反 1 取反1111 1111 11 0000 0000可以发现此时发生了进位截断为8位就是0000 0000也就是0 可是我们的0已经有0000 0000来表示了1000 0000再表示0就显得多余了 于是规定1000 0000用于表示-128 这也是符合一定逻辑的因为你会发现1000 0000 1 1000 0001也就是1000 0000 (-1) -127那么1000 0000表示为-128也就是合理的了 以上图片中顺时针走下去下一个数字就是上一个数字 1比如1 0 1-1 -2 1 在边界处有两个特例 -1 1 0这个计算符合数学逻辑但不是直接计算得到的因为-1的补码为1111 11110的补码为0000 0000。-1 1 1111 1111 1 1 0000 0000 由于发生了进位此时有9位数据要发生一次截断导致1 0000 0000变成了0000 0000所以最后得到了0。 127 1 -128这是一个特例因为我们规定了1000 0000为-128所以此处会发生这个不符合数学逻辑的情况。 总结 signed char的存储范围是[-128, 127]。当signed char发生了这个范围以外的计算要注意超过127的数值会从-128开始重新计算因为127 1 -128。
http://www.zqtcl.cn/news/818592/

相关文章:

  • 合肥网站建设新闻营销影视类网站建设
  • 焦作有网站建设公司c 转网站开发
  • 化妆品网站建设报告邯郸在哪个省
  • 自建网站怎么做后台管理系统世界网站流量排名
  • 我做外贸要开国际网站吗官方网站下载微博
  • 佛山专业建设网站网页模板是什么
  • 网站描述标签怎么写wordpress首页图标
  • 做系统去哪个网站好好玩又不用实名认证的游戏
  • 仿帝国网站源码wordpress主题idown
  • 大型网站开发php框架seo全站优化全案例
  • wordpress收录优化做抖音seo用哪些软件
  • DW怎么做招聘网站重庆有什么好玩的
  • 网站建设的网络公司百度官方app下载
  • 医疗电子科技网站建设站群 网站如何做
  • 汇邦团建网站谁做的钢结构招聘网
  • 如何制作一个动态的网站的登录详细步骤页面网站炫酷首页
  • 网站建设找星火龙网站开发 在线支付
  • 如何在公司网站下设置邮箱自己开发一个app要多少钱
  • 珠海市横琴新区建设环保局网站做catia数据的网站
  • 珠海pc网站建设wordpress子主题安全
  • 布吉企业网站建设网站维护与建设内容
  • 专业图书商城网站建设七初SEO网站建设
  • 南通公司网站模板建站wordpress设置主页
  • 小企业网站建设哪找广州app开发平台
  • 建设部国家标准网站免费网站建设 免备案
  • 网站后台批量上传图片ue5培训机构哪家强
  • 合肥制作网站在哪里建网站
  • 网站开发话术合同管理软件系统
  • 洛阳建设网站公司vue 微信公众号开发
  • 网页的网站建设什么网站可以做免费广告