一、关于类型转换

K&R C的不说了,说了还容易混淆,只说ANSI C的:

如果其中一个操作数的类型是unsigned long int,那么另外一个操作数也被转换为unsigned long int。其次其中一个操作数的类型是long int,而另一个操作数的类型是unsigned int,如果long int能够完整表示unsigned int 的所有值,那么unsigned int 类型操作数被转换为long int ,如果long int 不能完整表示unsigned int 的所有值,那么两个数都被转换为unsigned long int 。再再次,如果其中一个操作数是unsigned int,那么另外一个操作数(int、char、unsigned char)被转换为unsigned int。所上情况以外,两个操作数都为int。

通俗来说:

当执行蒜素运算时,操作数的类型如果不同,就会发生转换。数据类型一般操作浮点精度更高、长度更长的方向转换,整数型如果转换为singed不会丢失信息,就转换为singed,否则转换为unsigned。

看下面两个例子:

例1:小于号左右两边操作数都转换为int

 int main(){if (-1 < (unsigned int)1)printf("-1 is less than (unsinged int)1\n");elseprintf("-1 is not less than (unsinged int)1\n");return 0;}

例2:-1转换为unsigned int

 int main(){if (-1 < (unsigned int)1)printf("-1 is less than (unsinged char)1\n");elseprintf("-1 is not less than (unsinged char)1\n");return 0;}

二、几个怪异的声明标示符

volatile:

它被设计用来修饰被不同线程访问和修改的变量。确保本条指令不会因编译器优化而省略,且要求每次直接读值。优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。

register:

register修饰符暗示编译程序相应的变量将被频繁地使用,如果可能的话,应将其保存在CPU的寄存器中,以加快其存储速度。

三、关于sizeof

 #include <stdio.h>int main(){struct Test1{int i;char c;};struct Test2{char c;int i;};struct Test3{double d;char c;};struct Test4{char c;double d;};printf("test1:%d, test2:%d, test3:%d, test4:%d\n", sizeof(struct Test1), sizeof(struct Test2), sizeof(struct Test3), sizeof(struct Test4));return 0;}

在vs2008下输出结果为8、8、16、16,在下结果为8、8、12、12。

原因见这个地方:http://humanbeng.blog.163.com/blog/static/95932401201091623435337/

转载于:https://www.cnblogs.com/WIT-Evan/archive/2012/12/08/7291447.html

C专家编程复习摘要一相关推荐

  1. c语言多态性编码图形,C和C++经典著作 C专家编程Expert C Programming Deep C Secrets pdf...

    摘要 <C专家编程>可以帮助有一定经验的C程序员成为C编程方面的专家,对于具备相当的C语言基础的程序员,<C专家编程>可以帮助他们站在C的高度了解和学习C++.书本撷取了几十个 ...

  2. c专家编程/c陷阱_如何避免常见的初学者陷阱并像专家一样开始编码

    c专家编程/c陷阱 by Dmitri Grabov 德米特里·格拉波夫(Dmitri Grabov) 如何避免常见的初学者陷阱并像专家一样开始编码 (How to avoid common begi ...

  3. 《孙鑫老师谈如何学好编程》摘要

    <孙鑫老师谈如何学好编程>摘要 1找一本好书 适合你的水平 Amazon排行 Java编程思想 深入浅出MFC 并不太适合初学者 看不懂会打击自信心 把自己的基础告诉别人 去书店实际看一些 ...

  4. 计算机导论摘要,[计算机导论复习摘要.doc

    [计算机导论复习摘要 计算机导论复习摘要 计算机的发展与划代 从1946年第一台电子计算机ENIAC问世至今已经历了五代的发展历史. 1945 1955 1965 1975 80年代以后划分标准第一代 ...

  5. 一篇特别长的总结(C专家编程)

    博客链接: http://codeshold.me/2017/02/expert_c_programming.html 读一本书必输出一篇笔记或者总结!!! <C专家编程>这本书很早看完了 ...

  6. C专家编程—使用unsigned int可能产生的Bug(1)

    在vs2008环境下,如下代码显示不同的结果: #include<stdio.h> #define TOTAL_ELEMENTS (sizeof(array)/sizeof(array[0 ...

  7. Python专家编程

    Python专家编程 一.CPython CPython是一个默认的.广泛使用的Python编程语言的实现.CPython是用C语言写的.除了CPython,还有两个高质量的Python实现:一个是J ...

  8. 《C陷阱与缺陷》和《C专家编程》两本书又翻印了

    今天花了几个小时逛书店,偶然让我发现了<C陷阱与缺陷>和<C专家编程>这两本书.这让我很惊喜,喜欢收集书的我当然不会错过,一口气,两本书都收录了. 其实这两本我都已经下载了电子 ...

  9. 《JavaScript专家编程》——第1章 对象和原型 1.1鸟瞰JavaScript

    本节书摘来自异步社区<JavaScript专家编程>一书中的第1章,第1.1节,作者:[美]Mark Daggett(达格特)著,更多章节内容可以访问云栖社区"异步社区" ...

最新文章

  1. php函数剩余时间,php计算剩余时间的自定义函数
  2. python提取字符串中的 中文 日文 韩文
  3. android仿微信图片上传进度,android高仿微信发布动态(选择图片)
  4. 基于C#.NET的高端智能化网络爬虫
  5. opencv实现对象跟踪_如何使用opencv跟踪对象的距离和角度
  6. cmd 找到8080对应进程_多进程概括
  7. [译] 关于 HTTP/3 的一些心得
  8. 仅用 480 块 GPU 跑出万亿参数,中文最大规模多模态预训练模型发布
  9. Spring如何加载xml文件
  10. 怎么增加LINUX虚拟机的运行内存,Mac虚拟机内存怎么分配?虚拟机内存不足解决办法...
  11. 你怎么保存微博中喜欢的视频
  12. 数独算法 java_Java 编写数独计算器
  13. 用Desmos玩极坐标
  14. win7亮度怎么调_win7设置双屏显示的方法
  15. 真人口播视频号:流量不愁,变现才是重中之重丨国仁网络
  16. 安卓的短信记录导入苹果_如何将安卓手机短信导入到iphone(未越狱)
  17. 不使用前端的pdf.js,通过pdfbox转换pdf为图片,拼接成html实现pdf前端预览
  18. 什么叫句柄(Handle)?
  19. Beam search 算法的通俗理解
  20. 将office2016许可版切换为Office 365授权

热门文章

  1. 计算机系统基础:设备管理采用的相关技术知识笔记
  2. 【转载】Spring Boot 过滤器、监听器、拦截器的使用
  3. 【转载】一份完整的阿里云 Redis 开发规范,值得收藏!
  4. 今年最有档次的9个词!(不看后悔)
  5. 变频器按启动没反应_起重机软启动柜晶闸管损坏维修几大故障
  6. PC和服务器的IP地址信息DNS,PC和服务器的IP地址信息DNS
  7. IDEA 快捷键终极大全
  8. python (第八章)补充-可迭代对象(补充高阶函数,以及常用的高阶函数)
  9. flutter 透明度动画_Flutter中的动画填充+不透明度动画✨
  10. MySQL中的日志类型(二)-General query log