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

天网站建设子网站如何做

天网站建设,子网站如何做,不花钱自己可以做网站吗,zoho企业邮箱各位CSDN的uu们你们好呀#xff0c;今天小雅兰的内容是之前操作符那篇博客中没有讲完的内容#xff0c;整型提升这个小知识点也非常重要#xff0c;那现在#xff0c;就让我们进入操作符的世界吧 隐式类型转换 算术转换 操作符的属性 隐式类型转换 表达式求值的顺序一部… 各位CSDN的uu们你们好呀今天小雅兰的内容是之前操作符那篇博客中没有讲完的内容整型提升这个小知识点也非常重要那现在就让我们进入操作符的世界吧 隐式类型转换 算术转换 操作符的属性 隐式类型转换 表达式求值的顺序一部分是由操作符的优先级和结合性决定。 同样有些表达式的操作数在求值的过程中可能需要转换为其他类型。 C的整型算术运算总是至少以缺省整型类型的精度来进行的。 为了获得这个精度表达式中的字符和短整型操作数在使用之前被转换为普通整型这种转换称为整型提升。 这一规则是由C语言的发明人丹尼斯·里奇与肯·汤普逊创设的 A character, a short integer, or an integer bit-field, all either signed or not, or an object of enumeration type, may be used in an expression wherever an integer maybe used. If an int can represent all the values of the original type, then the value is converted to int; otherwise the value is converted to unsigned int. This process is called integral promotion. 这段话的大意是表达式中可以使用整数的地方就可以使用枚举类型或有符号或无符号的字符、短整数、整数位域。如果一个int可以表示上述类型则该值被转化为int类型的值否则该值被转化为unsigned int类型的值。这一过程被称作integral promotion。 整型提升的意义 表达式的整型运算要在CPU的相应运算器件内执行CPU内整型运算器(ALU)的操作数的字节长度 一般就是int的字节长度同时也是CPU的通用寄存器的长度。 因此即使两个char类型的相加在CPU执行时实际上也要先转换为CPU内整型操作数的标准长 度。 通用CPUgeneral-purpose CPU是难以直接实现两个8比特字节直接相加运算虽然机器指令 中可能有这种字节相加指令。所以表达式中各种长度可能小于int长度的整型值都必须先转 换为int或unsigned int然后才能送入CPU去执行运算。 C语言标准中仅规定了 char的长度 ≤ short int的长度 ≤ int的长度 这意味着short int与int的长度相等的可能。这种情形下unsigned short就无法提升为int表示只能提升为unsigned int。 char a; char b; char c; cab; b和a的值被提升为普通整型然后再执行加法运算。 加法运算完成之后结果将被截断然后再存储于a中。 说了这么久整型提升那么究竟怎样进行整型提升呢 整型提升是按照变量的数据类型的符号位来提升的。 int main() { char a3; //00000000000000000000000000000011——3的二进制 //但是这是一个char类型的变量会发生截断 //00000011——截断 char b127; //00000000000000000000000001111111——127的二进制 //01111111——截断 char cab; //00000011 //011111111 //整型提升 //00000000000000000000000000000011 //00000000000000000000000001111111 //相加 //00000000000000000000000010000010 //10000010——截断 printf(%d\n,c); //但是以%d的形式打印所以c又要发生整型提升 //按照变量的数据类型的符号位来提升 //11111111111111111111111110000010——补码 //11111111111111111111111110000001——反码 //10000000000000000000000001111110——原码 //所以最后的结果是-126 return 0; } //负数的整型提升char c1 -1;//变量c1的二进制位(补码)中只有8个比特位//1111111//因为 char 为有符号的 char//所以整型提升的时候高位补充符号位即为1//提升之后的结果是//11111111111111111111111111111111//正数的整型提升char c2 1;//变量c2的二进制位(补码)中只有8个比特位//00000001//因为 char 为有符号的 char//所以整型提升的时候高位补充符号位即为0//提升之后的结果是//00000000000000000000000000000001//无符号整型提升高位补0下面我们来看一下整型提升的具体例子 int main() {char a 0xb6;short b 0xb600;int c 0xb6000000;if(a0xb6)printf(a);if(b0xb600)printf(b);if(c0xb6000000)printf(c);return 0; }我们会发现打印结果最后只有c 因为 a,b要进行整型提升,但是c不需要整型提升 a,b整型提升之后,变成了负数,所以表达式 a0xb6 , b0xb600的结果是假,但是c不发生整型提升,则表达式 c0xb6000000 的结果是真 int main() {char c 1;printf(%u\n, sizeof(c));printf(%u\n, sizeof(c));printf(%u\n, sizeof(-c));return 0; }c只要参与表达式运算,就会发生整型提升,表达式 c ,就会发生提升,所以 sizeof(c) 是4个字节。 表达式 -c 也会发生整形提升,所以 sizeof(-c) 是4个字节。 但是 sizeof(c) ,就是1个字节。 算术转换 大多数 C 运算符执行类型转换以将表达式的操作数引入常见类型或将较短的值扩展到计算机运算中使用的整数大小。 C 运算符执行的转换取决于特定的运算符和操作数的类型。 但是许多运算符对整型和浮点型的操作数执行相似的转换。 这些转换称为“算术转换”。 从操作数值到兼容类型的转换会导致不改变其值。 如果某个操作符的各个操作数属于不同的类型那么除非其中一个操作数的转换为另一个操作数的类型否则操作就无法进行。 下面的层次体系称为寻常算术转换。 long double double float unsigned long int long int unsigned int int 如果某个操作数的类型在上面这个列表中排名较低那么首先要转换为另外一个操作数的类型后执行运算。 如果任一操作数是 long double 类型则将另一个操作数转换为 long double 类型。如果上述一个条件不满足且其中一个操作数的类型为 double则另一个操作数被转换为 double 类型。如果上述两个条件不满足且其中一个操作数的类型为 float则另一个操作数被转换为 float 类型。如果未满足上述三个条件所有操作数都不是浮点型则对操作数执行整型转换如下所示如果任一操作数是 unsigned long 类型则将另一个操作数转换为 unsigned long 类型。如果上述一个条件不满足且其中一个操作数的类型为 long 类型另一个操作数的类型为 unsigned int则这两个操作数都被转换为 unsigned long 类型。如果上述两个条件不满足且其中一个操作数的类型为 long则另一个操作数被转换为 long 类型。如果未满足上述三个条件并且任一操作数是 unsigned int类型则将另一个操作数转换为 unsigned int 类型。如果未满足上述任何条件则将两个操作数转换为 int 类型。但是算术转换要合理要不然会有一些潜在的问题。  float f 3.14; int num f;//隐式转换会有精度丢失 操作符的属性  复杂表达式的求值有三个影响的因素。 1. 操作符的优先级 2. 操作符的结合性 3. 是否控制求值顺序。 两个相邻的操作符先执行哪个 取决于他们的优先级。如果两者的优先级相同取决于他们的结合性。 下面我们来看看操作符的优先级这是一张表 在了解了操作符的优先级之后有些人就可能会突发奇想写出一些稀奇古怪的表达式写出来不仅是坑自己也是坑队友 猪队友表达式1 a*b c*d e*f 对于这行代码如果仅由优先级决定这个表达式的求值顺序那么所有三个乘法运算将在所有加法运算之前进行。事实上这个顺序不是必需的。实际上只要保证每个乘法运算在它相邻的的加法运算之前执行即可。 这个执行顺序可能是这样的 a*bc*d a*b c*d e*f a*b c*d e*f还有另外一种可能是这样  a*bc*de*fa*b c*da*b c*d e*f这就是一个典型的问题表达式写出来就是猪队友 猪队友表达式2 c --c;   操作符的优先级规则只要求自减运算在加法运算之前进行但我们并没有办法得知加法操作符的左操作数是在右操作数之前还是之后进行求值。它在这个表达式中将存在区别因为自减操作符具有副作用--c在c之前或之后执行表达式的结果在两种情况下将会不同。 猪队友表达式3 int main() { int i 10; i i-- - --i * ( i -3 ) * i i; printf(i %d\n, i); return 0; } 这也是一个猪队友表达式试想这样的表达式写出来就是为祸人间 《C和指针》的作者Kenneth A.Reek老师专门研究了这串代码并在各种不同的编译器下运行出了各种不同的结果。 猪队友表达式4 int fun() {   static int count 1;   return count; } int main() {   int answer;   answer fun() - fun() * fun();   printf( %d\n, answer);//输出多少 return 0; } 虽然在大多数的编译器上求得结果都是相同的。 但是上述代码 answer fun() - fun() * fun(); 中我们只能通过操作符的优先级得知先算乘法 再算减法。 函数的调用先后顺序无法通过操作符的优先级确定。 就是说调用fun函数要调用3次第一次fun函数的调用结果为2第二次fun函数的调用结果为3第三次fun函数的调用结果为4但是顺序是不确定的。 可能是2-3*4可能是3-2*4可能是4-2*3猪队友表达式5 #includestdio.h int main() { int i 1; int ret (i) (i) (i); printf(%d\n, ret); printf(%d\n, i); return 0; } 尝试在linux 环境gcc编译器VS2022环境下都执行看结果。 VS2022环境的结果 这段代码中的第一个 在执行的时候第三个是否执行这个是不确定的因为依靠操作符的优先级和结合性是无法决定第一个 和第 三个前置 的先后顺序。 总结我们写出的表达式如果不能通过操作符的属性确定唯一的计算路径那这个表达式就是存在问题的。 好啦小雅兰今天的内容就到这里啦又是一篇拖了好久的博客小雅兰以后的时间可能就没那么多了今天开学考试所有的科目就都已经结束从明天开始就要正式上课啦星期一第一节课就是电路分析这是破大防了小雅兰以后也会一直努力学C语言和数据结构的
http://www.hkea.cn/news/14546601/

相关文章:

  • 网站建设 中标乐山市住房和城乡规划建设局网站
  • 成都建设网官方网站wordpress 文件存储
  • 响应式网站研究现状移动应用开发适合女生吗
  • 宁波网站建设制作环境设计专业就业方向
  • 重庆做网站letidewordpress+缩略图截图
  • 网站建设有哪些技术html做企业门户网站
  • 公司网站域名续费科技公司怎么取名字
  • 快速做网站详情页公司网站建设哪家快
  • 江门cms建站wordpress主题结构讲解视频教程
  • 做视频网站要什么主机兰州专业做网站的公司有哪些
  • 地方门户网站的前途东营人力资源招聘信息网
  • 做外贸主要看什么网站什么是营销模式
  • 深圳网站优化安徽网站设计找哪家
  • 站外引流推广渠道阜阳网站网站建设
  • 网站建设的部署杭州画册设计公司
  • 光谷网站开发做网站作业
  • 成都装修网站制作多少钱网址域名查询网
  • 做网站都需要什么软件石大网页设计与网站建设客观题
  • 电子政务和网站建设工作的总结平台建设包括哪些方面
  • 阿里云备案成功怎么建设网站汇编语言做网站
  • 土特产 网站源码绿色建筑信息平台
  • 手机如何制作一个网站桂林微信网站设计
  • 网站前端程序制作开发如何开通微信商城
  • 网站建设期任务及总结响应式网站 app
  • 上海建设网站有人说做网站赌
  • 网站建设主要工作最近的广告公司在哪里
  • 门户网站建设方法在线销售网站设计文献
  • 上海网站开发与设哪个网站可以搭建网页
  • 怎么做音乐mp3下载网站国外 网站网站
  • 国内最便宜机票网站建设网站建设时间计划