《Pointers On C》读书笔记(第五章 操作符和表达式)
1.C语言操作符优先级表

2.算术操作符中%(取模操作符)只适用于整型类型,其余几个操作符(+、-、*、/)既适用于整型类型也适用于浮点类型。当/操作符的两个操作数都是整型时,它执行整除运算,其它情况下则执行浮点数除法。
3.移位操作符包括左移位和右移位操作符,且只适用于整型类型。左移位时,值最左边的位被丢弃,右边多出来的空位则由0补齐。右移位时,值最右边的位被丢弃,左边移入的位由0填充(逻辑移位)或由原先该值的符号位填充(算术移位)。标准说明无符号值执行的所有移位操作都是逻辑移位,但对于有符号值则取决于编译器。而且,如果移位的位数比操作数的位数还要多,结果也是由编译器决定的。
4.位操作符对操作数的各个位执行&(与)、|(或)和^(异或)操作,只适用于整型类型。它可与移位操作符一起使用来设置整型值中的单个位,也可用来判断整型值中的单个位。
value |= << bit_number; //将指定位设置为1
value &= ~( << bit_number); //将指定位设置为0
value & << bit_number; //判断指定位是否为1
5.赋值操作符用一个等号表示,它把右操作数的值存储于左操作数指定的位置。赋值是表达式的一种,而不是某种类型的语句。赋值表达式的值就是左操作数的新值,它可以作为其他赋值操作符的操作数。
复合赋值符(+=、-=、*=、/=、%=、<<=、>>=、&=、^=、|=)的左操作数只求值一次。
6.单目操作符sizeof用来判断其操作数的类型长度,以字节为单位表示。其操作数既可以是个表达式(通常是个变量),也可以是两边加上括号的类型名。当操作数是数组名时,它返回该数组的长度。
注意:用sizeof来判断表达式的类型长度时,并不需要对表达式进行求值,所以sizeof(a=b+1)并没有向a赋任何值,只是单纯返回变量a的类型长度。
7.增值操作符(++)和减值操作符(--)的结果是变量值的拷贝,认识这一点非常重要。
8.逻辑操作符(&&、||)具有一个重要的特征:短路求值。即:如果&&操作符的左操作数为假,则右操作数不再求值;如果||操作符的左操作数为真,则右操作数不再求值。
9.逗号操作符将两个或多个表达式分隔开来,这些表达式自左向右逐个进行求值,整个逗号表达式的值就是最后那个表达式的值。
注意:在使用逗号表达式之前,你要问问自己它能否让程序在某些方面表现更出色。如果答案是否定的,你就不要使用它。顺便说一下,“更出色”并不包括“更炫”、“更酷”或“令人印象更深刻”。
10.左值意味着一个位置,右值意味着一个值。
11.C的整型算术运算总是至少以缺省整型类型的精度来进行的,为了获得这个精度,表达式中的字符型和短整型操作数在使用之前被转换为普通类型,这种转换称为整型提升。如果某个操作符的各个操作数属于不同的类型,那么除非其中一个操作数转换为另外一个操作数的类型,否则操作就无法进行。
寻常算术转换的顺序为:int -> unsigned int -> long int -> unsigned long int -> float -> double -> long double。
当整型值转换为float型值(标准规定仅要求6位数字的精度)时,也有可能损失精度。当float型值转换为整型值时,小部分被舍弃。如果浮点数的值过于庞大,无法容纳于整型值中,那么其结果是未定义的。
12.复杂表达式的求值顺序由3个因素决定:操作符的优先级、操作符的结合性以及操作符是否控制执行的顺序。其规则为:两个相邻操作符的执行顺序由它们的优先级决定。如果它们的优先级相同,它们的执行顺序由它们的结合性决定。除此之外,编译器可以自由决定使用任何顺序对表达式进行求值,只要它不违背逗号、&&、||和?:操作符所施加的限制。
《Pointers On C》读书笔记(第五章 操作符和表达式)的更多相关文章
- 《C和指针》读书笔记——第五章 操作符和表达式
1.当/操作符的两个操作数都是整数时,它执行整除运算:其他都是执行浮点数除法. 2.逻辑移位:左边移入的位用0填充: 算数移位:左边移入的位用符号位填充: 3.位置1 :value |= 1<& ...
- 《C和指针》读书笔记 第5章-操作符和表达式
原创文章,转载请注明出处:http://www.cnblogs.com/DayByDay/p/3936503.html
- 《Linux内核设计与实现》第四周读书笔记——第五章
<Linux内核设计与实现>第四周读书笔记--第五章 20135301张忻 估算学习时间:共1.5小时 读书:1.0 代码:0 作业:0 博客:0.5 实际学习时间:共2.0小时 读书:1 ...
- 《Linux内核设计与实现》读书笔记——第五章
<Linux内核设计与实现>读书笔记--第五章 标签(空格分隔): 20135321余佳源 第五章 系统调用 操作系统中,内核提供了用户进程与内核进行交互的一组接口.这些接口让应用程序受限 ...
- 深入理解 C 指针阅读笔记 -- 第五章
Chapter5.h #ifndef __CHAPTER_5_ #define __CHAPTER_5_ /*<深入理解C指针>学习笔记 -- 第五章*/ /*不应该改动的字符串就应该用 ...
- 《Linux内核设计与实现》读书笔记 第五章 系统调用
第五章系统调用 系统调用是用户进程与内核进行交互的接口.为了保护系统稳定可靠,避免应用程序恣意忘形. 5.1与内核通信 系统调用在用户空间进程和硬件设备间添加了一个中间层, 作用:为用户空间提供了一种 ...
- Getting Started With Hazelcast 读书笔记(第五章,第六章)
第五章 监听 本章应该是Hazelcast的核心机制了,Hazelcast通过注册各种监听器获悉集群中其他应用对数据的修改,成员的加入,退出等. 分为3个层次. 1.EntryListener(对数据 ...
- 《linux内核设计与实现》读书笔记第五章——系统调用
第5章 系统调用 操作系统提供接口主要是为了保证系统稳定可靠,避免应用程序恣意妄行. 5.1 与内核通信 系统调用在用户空间进程和硬件设备之间添加了一个中间层. 该层主要作用有三个: 为用户空间提供了 ...
- 深入Java虚拟机读书笔记第五章Java虚拟机
Java虚拟机 Java虚拟机之所以被称之为是虚拟的,就是因为它仅仅是由一个规范来定义的抽象计算机.因此,要运行某个Java程序,首先需要一个符合该规范的具体实现. Java虚拟机的生命周期 一个运行 ...
随机推荐
- ORACLE函数TO_CHAR以及数字转换格式[Z]
本来这是很简单的函数,但在屡次忘记格式之后,决定还是翻译一遍以铭记在心. 参考<<Oracle Database SQL Reference>>. 关于nl ...
- Weblogic 部署注意事项
Weblogic下部署服务注意事项: 1. 解决weblogic与hibernate的jar包冲突问题: 首 先找到该系统的DOMAIN_HOME(即你所建的域所在的位置)如:域empi的DOMAIN ...
- HTML meta refresh 刷新与跳转(重定向)页面
<meta http-equiv="refresh" content="5; url=http://www.cnblogs.com/" /> 可用于 ...
- OS X EI Capitan 10.11.1快速升级方法介绍
公告:本文纯粹是给国内小水管用户而写的,如果你们家网络是100M光线那么就不需要看本文了! 一句话概要本文:在本地山寨从App store服务器上下载安装包的动作! 导读:OS X EI Capita ...
- 已知某一天是周几 求给定的一天是周几的算法 C++实现
#include<iostream> using namespace std; struct Date{ int year,month,day; }; enum Week{ MON=, T ...
- QT中进度条的使用
在QT中可以用QProgressBar或着QProgressDialog来实现进度条. QProgressBar的使用 首先在designer中拖一个按钮和进度条部件,按下面初始化 //补充:下面两句 ...
- UI设计中与字号有关的知识
在我们设计APP.设计前端页面时,免不了要和各种文字大小打交道.字体的大小有多种单位,不明究里的话使用起来很容易出问题.今天整理了这方面的东西做了个图片,方便查看. 图上的资料来自互联网,感谢大家的负 ...
- poj2388---求奇数个数字的最中间的数
#include <stdio.h> #include <stdlib.h> int cmp(const void *a,const void *b) { return (*( ...
- svn 问题汇总
1.当删除了原来的仓库时,再次新建,更新版本时会出现这个问题:
- Linux ln命令具体解释及使用
Linux ln命令具体解释及使用 ln是linux中一个很重要命令,它的功能是为某一个文件在另外一个位置建立一个不同的链接,这个命令最经常使用的參数是-s,详细使用方法是:ln –s 源文件 目标文 ...