做推广的网站名称做网站维护前景
2026/1/17 18:15:09 网站建设 项目流程
做推广的网站名称,做网站维护前景,网络服务提供者,冀州做网站的公司1.整数在内存中的存储 我们回顾一下整数的2进制表示方法#xff1a;原码、反码和补码正整数中#xff1a;原码反码补码负整数#xff1a;三种表示方法各不相同 原码#xff1a;直接将数值按照正负数的形式翻译成⼆进制得到的就是原码。反码#xff1a;将原码的符号位不变原码、反码和补码正整数中原码反码补码负整数三种表示方法各不相同原码直接将数值按照正负数的形式翻译成⼆进制得到的就是原码。反码将原码的符号位不变其他位依次按位取反就可以得到反码。补码反码1就得到补码。对于整形而言数据存放内存中其实存放的是二进制的补码在计算机系统中数值⼀律用补码来表示和存储。原因在于使⽤补码可以将符号位和数值域统⼀处理同时加法和减法也可以统⼀处理CPU只有加法器此外补码与原码相互转换其运算过程是相同的不需要额外的硬件电路2.大小端字节序和字节序判断2.1 什么是大端和小端大端存储模式数据的低位保存在内存的高地址处高位保存在低地址处小端存储模式数据的低位保存在内存的低地址处高位存在高地址处2.2 为什么有大小端之分计算机系统中以字节为单位每个地址单元对应着一个字节一个字节为8bit位C语言中有各种各样的类型(char-8bit,short-16bit,long-32bit)另外对于位数大于8位的处理器例如16位或者32位的处理器由于寄存器宽度大于一个字节必然存在着一个如何将多个字节安排的问题因而就有了大端和小端之分。例如 一个16bit的short型x-内存中的地址为0x0010,x的值为0x1122-0x11高字节0x22低字节 对于大端模式0x11低地址0x22高地址 对于小端模式则相反 我们常用的X86结构都是小端模式而KEIL C51为大端模式 很多的ARMDSP都是小段模式 有些ARM处理器可以有硬件来选择是大端模式还是小端模式2.3 与内存存储有关的练习题判断系统是小端存储还是大端存储#includestdio.hintcheck_sys(){inti1;return(*(char*)i);}intmain(){intretcheck_sys();if(ret1){printf(⼩端\n);}else{printf(⼤端\n);}return0;}对于X86系统中采用小端存储模式整形数据用4个字节表示 - 1对应着:0x0001(00 00 00 01)通过访问第一个字节取整形的地址随后强转为char*,此时对其解引用时按一个字节访问就可以知道是大端还是小端用%d打印无符号整数的情况intmain(){chara-1;//10000000000000000000000000000001//11111111111111111111111111111110//11111111111111111111111111111111 - 截断//11111111signedcharb-1;//10000000000000000000000000000001//11111111111111111111111111111110//11111111111111111111111111111111 - 截断//11111111unsignedcharc-1;//10000000000000000000000000000001//11111111111111111111111111111110//11111111111111111111111111111111 - 截断//11111111printf(a%d,b%d,c%d,a,b,c);//%d - 十进制的形式打印有符号整数 - 转换成原码打印//如果数据类型本身为无符号整形符号位默认为0//a和b都是 -1//c默认0为符号位则//00000000000000000000000011111111 - 255return0;}用%u打印有符号整数的情况#includestdio.hintmain(){chara-128;//10000000000000000000000010000000//11111111111111111111111101111111//11111111111111111111111110000000 - 截断//10000000 - aprintf(%u\n,a);//%u 打印无符号的10进制形式//默认把当前的数字当作无符号数打印是高位直接补当前最高位//11111111111111111111111110000000 - 4294967168charb128;printf(%u\n,b);//00000000000000000000000010000000//10000000//即便char的范围是-128~127,但是也可以存进去具体的话系统会进行调整//此时和上面同理//11111111111111111111111110000000 - 4294967168return0;}数据类型的范围#includestdio.hintmain(){chara[1000];//char的范围是-128~127inti0;//i的范围是0~4294967295for(i0;i1000;i){//当a[i] -127之后//下一个a[i] 128//再一直减少到0 a[255]a[i]-1-i;}//strlen默认以\0结束其本质就是0//所以到:127128 255的时候就停止计算大小printf(%d,strlen(a));return0;}3. 浮点数在内存中的存储3.1 浮点数的存储S 0 - 正数S 1 - 负数M - 有效数字大于等于1小于2E - 指数位例如十进制的-5.05-101.0负数-S1101.11.01×2^2-E2总体描述(-1)^1×1.01×2^2IEEE 754规定对于32位的浮点数(float)最⾼的1位存储符号位S接着的8位存储指数E剩下的23位存储有效数字M对于64位的浮点数(double)最⾼的1位存储符号位S接着的11位存储指数E剩下的52位存储有效数字M3.1.1 浮点数存储的特别规定①1≤M2:M可以写成1.xxxxxxxx的形式xxxxxxxx只表示小数部分计算机内部保存M的时候默认这个数的第一位总是为1因此不存储这位只保留后面的xxxxxxxx 部分32位的浮点数中留给M的只有23位第一位的1舍去后就相当于可以保存24位有效数字②E为一个无符号整数E为8位取值范围为0~255存入内存时真实值加上中间数127E位11位取值范围为0~2047存入内存时真实值加上中间数10232^10-E为10存入到32位浮点数E保存位101271373.1.2 浮点数取出的规定①E不全为0或不全为1的情况E减去127/1023得到真实值再在有效数字前加一位10.5-0.1正数部分必须为11.0*2^(-1)中间值E-1127126-01111110尾数去掉整数部分的0补齐到23位00111111000000000000000000000000②E全为0浮点数的指数E等于1-127/1023即为真实值有效数字不加第一位的1直接还原为0.xxxxxx的小数00000000000000000000000000000000③E全为1有效数字M全为0表示无穷大3.2 具体案例intn9;float*pFloat(float*)n;printf(n的值为%d\n,n);//9printf(*pFloat的值为%f\n,*pFloat);//0.0000009还原成浮点数00000000000000000000000000001001E为:00000000S0指数全为0所以符合全01的情况 V(-1)^0×0.00000000000000000001001×2^(-126)1.001×2^(-146)用十进制小数表示就是0.000000

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询