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

高端企业网站开发wordpress 子主题 样式

高端企业网站开发,wordpress 子主题 样式,vi系统设计一般多少钱,大连 祥云 网站优化数据在内存中的存储 1. 数据类型的介绍 之前已经介绍过C语言中的基本数据类型了#xff0c;主要有#xff1a; char //字符数据类型short //短整型int //整形long //长整型long long //更长的整形float //单精度浮点数double //双精度浮点数 注意#xff1a;C语言中是是没…数据在内存中的存储 1. 数据类型的介绍 之前已经介绍过C语言中的基本数据类型了主要有 char //字符数据类型short //短整型int //整形long //长整型long long //更长的整形float //单精度浮点数double //双精度浮点数 注意C语言中是是没有字符串类型的。 类型的意义 使用这种类型的数据所开辟的内存空间的大小。如何看待内存空间的视角。 2. 类型的基本分类 【整形家族】 char :unsigned char signed char short :unsigned short signed short int :unsigned int signed int long :unsigned long signed long long long :unsigned long long signed long long 注意C语言规定sizeof(long)sizeof(int)所以long类型的占用的空间不能确定是4还是8。 【浮点数家族】 float double 【构造类型】 数组类型 结构体类型 枚举类型 联合类型 【指针类型】 int *pi; char *pc; float* pf; void* pv; 3. 整形在内存中的存储 由于变量的创建是需要空间的具体使用的空间的大小是根据不同的类型而确定的。例如 char ch 0;这里ch变量是char类型所以就在内存中占用了一个字节。 注意char类型一般C语言官方没有明确规定是 signed char还是 unsigned char一般的编译器例如VS上char就是signed char 。但是除了char以外其他的整形都是有明确规定的例如int就是signed int。 那么不同的数据类型所能表示的范围是多少呢我们可以通过以下代码来查看 #includestdio.h #includestdlib.h #include limits.h int main() {printf(%d\n, INT_MAX);printf(%d\n, INT_MIN);return 0; }那么这些数据的范围大小是怎么计算出来的呢这里以char为例 char占用一个字节一个字节有8个比特位每一个比特位只能是0或1所以char类型在内存中组合方式一共就有256种 注意这里图中所有的二进制序列都是代表的是内存中的补码。由此观之char类型的数据范围就是-128~127。unsigned char的范围就是0~255。 由此类推short数据范围就是-32768~32767。其他的整数数据类型的范围小伙伴们可以自行查阅。 3.1 整形在内存中的存储 计算机中保存整数二进制的方式主要有三种分别是原码反码补码。整形在内存中主要是以补码的形式保存。三种表示方法均有符号位和数值位两部分符号位都是用0表示“正”用1表示“负”而数值位则是直接读取即可。 正数的原、反、补码都相同。 负整数的三种表示方法各不相同。 原码直接将数值按照正负数的形式翻译成二进制就可以得到原码。 补码将原码的符号位不变其他位依次按位取反就可以得到反码。 反码1就得到补码。 对于整形来说数据存放内存中其实存放的是补码。使用补码可以将其符号位和数值域进行统一运算。 原因 在计算机系统中数值一律用补码来表示和存储。原因在于使用补码可以将符号位和数值域统 一处理 同时加法和减法也可以统一处理CPU只有加法器此外补码与原码相互转换其运算过程 是相同的不需要额外的硬件电路。 对于数据存放内存中存放的是补码我们可以通过编译器进行直接观察。例如-1的补码是32个1用16进制表示就是全f。 但我们把例子换成4的时候 这里发现内存中是有低地址到高地址存放数据的。数据的低权值位是放在低地址处的。这里就要引出新概念了大端字节序和小端字节序。 4. 大小端介绍 概念 大端存储模式是指数据的低位保存在内存的高地址中而数据的高位保存在内存的低地址中 小端存储模式是指数据的低位保存在内存的低地址中而数据的高位,保存在内存的高地址中。 为什么有大端和小端 为什么会有大小端模式之分呢这是因为在计算机系统中我们是以字节为单位的每个地址单元都对应着一个字节一个字节为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 则 为大端模式。很多的ARMDSP都为小端模式。有些ARM处理器还可以由硬件来选择是大端模式 还是小端模式。 字节序以字节为单位讨论数据的存储的。一个char类型只占用一个字节所以对char类型讨论大小端字节序是没有意义的这里大小端字节序是针对占用的内存空间大于1个字节的整数数据类型的。 大小端字节序是由电脑内置部件决定的与编译器的类型无关。这里作者的电脑是以小端字节序存储的。 4.1 练习 Q1 请简述大端字节序和小端字节序的概念设计一个小程序来判断当前机器的字节序。 Answer #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; }以下是错误的写法 int main()//这种是错误的 {int a 0x11223344;char b (char)a;//无论如何b拿到的都是a的最低字节的数据 if (b 0x44)printf(小端!\n);if (b 0x11)printf(大端\n);return 0; }上面这段代码无论如何b拿到的都是a的最低字节的数据 。 Q2 //输出什么 #include stdio.h int main() {char a -1;unsigned char c-1;printf(a%d,c%d,a,c);return 0; }char a -1;//-1的二进制补码是32个1。因为char只有一个字节存放不下先发生截断a中存放的就是8个1。 unsigned char c -1;//c也是只有1个字节发生截断存放的也是8个1。 当 printf(a %d,c %d,a,c);执行时由于%d代表的是有符号打印所以a和c均会发生整形提升 先看a的整形提升a是有符号数整形提升时补的是符号位所以就补1变成32个1又因为是以有符号的形式打印而符号位又是1所以将32个1翻译成原码就是-1即打印-1. 再看b的整形提升b是无符号数整形提升时最高位补0所以b就变成了24个0和8个1又因为是以有符号的形式打印而符号位是0翻译成原码就是255。 运行结果 Q3 //输出什么 #include stdio.h int main() {char a -128;printf(%u\n,a);return 0; }-128的 原码100000000000000000000000010000000 反码111111111111111111111111101111111 补码111111111111111111111111110000000 由于a只有8比特的空间所以发生截断a中存放的是10000000 在执行 printf(%u\n,a);语句时因为%u是无符号整形打印所以a会发生整形提升由于a是signed char为有符号类型整形提升时高位补符号位的数也就是补1所以此时a中存放的是11111111111111111111111110000000因为是%u无符号打印所以直接将这串二进制序列看作原码进行打印。 运行结果 Q4 //输出什么 #include stdio.h int main() {char a 128;printf(%u\n,a);return 0; }先写出128的补码再截断存储到a中a中存放的也是10000000与Q3类似。 运行结果 Q5 int main() {//输出什么int i -20;unsigned int j 10;printf(%d\n, i j);//按照补码的形式进行运算最后格式化成为有符号整数return 0; }先写出i的 原码10000000000000000000000000010100 反码11111111111111111111111111101011 补码11111111111111111111111111101100 写出j的 补码00000000000000000000000000001010 接着让这两个补码相加 11111111111111111111111111101100 00000000000000000000000000001010 11111111111111111111111111110110 又因为是%d以有符号整形进行打印所以将相加之后的二进制的最高位看作符号位。所以这里将相加得到的二进制序列转换成原码10000000000000000000000000001010也就是-1。 运行结果 Q6 //输出什么 unsigned int i; for(i 9; i 0; i--) {printf(%u\n,i); }这里由于i的数据类型是unsigned int 类型是恒0的所以I0这个条件会一直满足程序发生死循环。 运行结果发生死循环 Q7 //输出什么 int main() {char a[1000];int i;for(i0; i1000; i){a[i] -1-i;}printf(%d,strlen(a));return 0; }这里arr[i]的值一开始是-1-2-3……当arr[i]的值变成-128时由本文之前画的图可知此时再减1就会变成127接着就是126125……10.这里strlen计算数组的长度时会遇到’\0’才停止而’\0’的ascll码值就是0即这里数组的长度就是当arr[i]变成0之前的元素的个数这里由-1到-128再由-128到127再到1一共有255个元素。所以结果就是255. 运行结果 Q8 //输出什么 #include stdio.h unsigned char i 0; int main() {for(i 0;i255;i){printf(hello world\n);}return 0; }此处由于i的数据类型是unsigned char 其数据范围是[0255]始终是大于0的所以会一直打印发生死循环。 运行结果发生死循环
http://www.w-s-a.com/news/939065/

相关文章:

  • 静态网站做新闻系统深圳外贸网站建设哪家好
  • 网站如何做词360免费wifi老是掉线怎么办
  • 网站建设分金手指排名十八iis10 wordpress
  • 成都网站优化公司哪家好网站建设帮助中心
  • 做外单什么网站好佛山市建设企业网站服务机构
  • 哪些网站是单页面应用程序北京门头沟山洪暴发
  • 织梦(dedecms)怎么修改后台网站默认"织梦内容管理系统"标题关键词优化收费标准
  • 网站设计和备案企业官网网站建设免费
  • 公司概况-环保公司网站模板搜索引擎营销的基本流程
  • 门户网站建设经验天津市建设银行租房网站
  • 百度推广 帮做网站吗怎样修改网站的主页内容
  • 网站怎么做dns解析公司官网改版方案
  • 湛江市住房和城乡建设局网站杭州网站公司哪家服务好
  • 设计网站公司湖南岚鸿设计镜像的网站怎么做排名
  • 你注册过哪些网站微信app下载安装官方版2019
  • 杭州滨江的网站建设公司人才招聘网网站策划方案
  • 门户网站是指提供什么的网站网站优化需要工具
  • 和小男生做的网站代理公司注册步骤
  • 天猫网站建设的目标是什么seo有些什么关键词
  • 网站前端建设都需要什么莱芜信息港网页
  • 如何做360网站优化网站建设培训教程新手入门到精通
  • 做网站有的浏览器怎么做网站网站赚钱
  • 织梦 做网站 教程百度登录个人中心官网
  • ftp怎么修改网站wordpress分享积分
  • 营销策划方案的步骤西安关键词优化软件
  • 南宁自己的网站移动互联网技术学什么
  • 2017湖北建设教育协会网站自己接单做网站
  • 定制网站建设制作h5网站要多久
  • 泰安中呼网站建设有限公司 概况个人网站的设计与实现参考文献
  • 圣诞节网站怎么做怎么获取网站的图片