《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虚拟机的生命周期 一个运行 ...
随机推荐
- 用正则表达式替换内容 php
以前做一个项目,就是有一个问答的页面,比如说在回答或者提问的内容中插入表情.写到内容里的是表情图片的名字(而且是不带后缀的,比如:f_002.png)表情包放在项目里,我需要在取除内容的时候将里面的表 ...
- 监控mysql执行的sql语句
linux平台 监控mysql执行的sql语句 为了做好配合开发做性能和功能测试,方便监控正在执行的sql语句, 可以在/etc/mysqld中添加如下: log =/usr/local/mys ...
- C++小知识之Vector排序
// sort algorithm example #include <iostream> // std::cout #include <algorithm> / ...
- Android 树形菜单
首先来一张萌萌哒的效果图(比较懒 - -) 然后是代码: // Node package com.example.treeview.utils; import java.util.ArrayList; ...
- Linux网络管理——TCP/IP四层模型
1. 网络基础 .note-content {font-family: "Helvetica Neue",Arial,"Hiragino Sans GB",&q ...
- php 异步处理的gearman
1. php 是进程处理,单线程到的,没有异步机制,在一些处理花费时间较多的情况导致用户体验较差.可以使用gearman 进行异步处理. 2. gearman 是一个异步处理的socket架构. 需要 ...
- 【Chromium中文文档】Profile架构(看看谷歌家的重构)
进程模型 转载请注明出处:https://ahangchen.gitbooks.io/chromium_doc_zh/content/zh//General_Architecture/Profile_ ...
- JS中特殊句子-with
1 with 语句 为一个或一组语句指定默认对象. 用法:with (<对象>) <语句>; with 语句通常用来缩短特定情形下必须写的代码量.在下面的例子中,请注意 Mat ...
- win7系统还原教程
当我们的win7系统出现故障了导致系统不能稳定运行而我们没有更好的解决办法时,我们一般的方式是对系统进行还原或重新安装win7系统了,本文主要讨论win7系统还原,抛开第三方软件不说,win7系统自带 ...
- firemonkey打开子窗体
procedure TForm1.Button1Click(Sender: TObject);varChildForm: TForm2;beginChildForm := TForm2.Create( ...