C Primer Plus 第五章:运算符、表达式和语句
2015-07-21 15:37
309 查看
1、除法(/):
整数的除法没有小数点位,小数点位被舍去,商被留下。浮点数的除法商有小数点,而且只要除数和被除数只要有一个是浮点数相除后都是浮点数。例如:12 / 3 = 4,12 / 3.0 =4.0,12.0 / 3 = 4.0, 12.0 / 3.0 = 4.0。实际上是计算机不能真正用整数除以浮点数,而是编译器将整数转变成浮点数,然后再相除。
2、其他运算符:
Sizeof运算符:
以字节为单位返回其操作数的大小,格式为:sizeof(数据类型)
C语言规定sizeof返回size_t类型的值。这是一个无符号整数类型,但它不是一个新类型。相反,与可移植类型(如int32_t等)相同。说到这插一句:C有一个typedef机制,它允许为一个已有的类型创建一个别名。
例如:typedef double real,就使得real成为了double的别名。当后面使用real定义变量的时候,就是double类型变量。与此类似,C的头文件系统可以使用typedef来使size_t在系统中作为unsigned int或unsigned long的同义词,当使用size_t时,编译器会用适合您的系统的标准类型代替它。
3、++运算符:
a++和++a:
a++:是先赋值,再加1。
比如:(1)、a = 1;i = a++;则a先赋值给i,a再加1,最后是i = 1,a = 2.
(2)、y = 2, n = 3; x = (y + n++)*6:等价于 x = (y + n)*6;n = n + 1;最后x的值是30,n值是4.
++a:是先加1,再赋值。
比如:(1)、b = 1;j = ++b;则b先加1得b = 2,然后把b赋值给j,最后是j = b =2.
(2)、y = 2, n = 3; x = (y + n++)*6:等价于n = n + 1;x = (y + n)*6;最终结果是:n = 4;x = (2 + 4)*6 = 36
4、类型转换
自动类型转换 & 强制类型转换
4.1、自动类型转换:比如当char和short类型出现在表达式里或者作为函数的参数时,它们都将被提升为int类型。当float类型作为一个函数参数时被提升为double类型。当把一种类型的值赋给另一种类型的变量时,该值被转换成和那个变量相同的类型。当较大类型的值被转换成较小类型的值(long变成short,或者double变成float)时,它们可能丢失数据的精度。
4.2、强制类型转换:是在某个量的前面放置用圆括号括起来的被希望转换成的类型名。圆括号和类型名一起构成了指派运算符(type)。
比如:
int mice;
mice = 1.6 + 1.7;//第一行
mice = (int)1.6 + (int)1.7;//第二行
第一行中1.6+1.7 = 3.3然后自动类型转换,截尾后结果是3,而第二行是分别截尾,再相加,结果是2。
5、做课后题总结:
1:关于a++和++a的问题已经没问题,可是在做题中要注意的是无论先赋值后加1还是先加1再赋值,最后要用加1之后的变量去执行下面程序,而不是原变量的值,这个切记!每次都会使用原来的值而忘记使用加1后的值,原因是太关注先赋值和后赋值去了,把加1忘了!
整数的除法没有小数点位,小数点位被舍去,商被留下。浮点数的除法商有小数点,而且只要除数和被除数只要有一个是浮点数相除后都是浮点数。例如:12 / 3 = 4,12 / 3.0 =4.0,12.0 / 3 = 4.0, 12.0 / 3.0 = 4.0。实际上是计算机不能真正用整数除以浮点数,而是编译器将整数转变成浮点数,然后再相除。
2、其他运算符:
Sizeof运算符:
以字节为单位返回其操作数的大小,格式为:sizeof(数据类型)
C语言规定sizeof返回size_t类型的值。这是一个无符号整数类型,但它不是一个新类型。相反,与可移植类型(如int32_t等)相同。说到这插一句:C有一个typedef机制,它允许为一个已有的类型创建一个别名。
例如:typedef double real,就使得real成为了double的别名。当后面使用real定义变量的时候,就是double类型变量。与此类似,C的头文件系统可以使用typedef来使size_t在系统中作为unsigned int或unsigned long的同义词,当使用size_t时,编译器会用适合您的系统的标准类型代替它。
3、++运算符:
a++和++a:
a++:是先赋值,再加1。
比如:(1)、a = 1;i = a++;则a先赋值给i,a再加1,最后是i = 1,a = 2.
(2)、y = 2, n = 3; x = (y + n++)*6:等价于 x = (y + n)*6;n = n + 1;最后x的值是30,n值是4.
++a:是先加1,再赋值。
比如:(1)、b = 1;j = ++b;则b先加1得b = 2,然后把b赋值给j,最后是j = b =2.
(2)、y = 2, n = 3; x = (y + n++)*6:等价于n = n + 1;x = (y + n)*6;最终结果是:n = 4;x = (2 + 4)*6 = 36
4、类型转换
自动类型转换 & 强制类型转换
4.1、自动类型转换:比如当char和short类型出现在表达式里或者作为函数的参数时,它们都将被提升为int类型。当float类型作为一个函数参数时被提升为double类型。当把一种类型的值赋给另一种类型的变量时,该值被转换成和那个变量相同的类型。当较大类型的值被转换成较小类型的值(long变成short,或者double变成float)时,它们可能丢失数据的精度。
4.2、强制类型转换:是在某个量的前面放置用圆括号括起来的被希望转换成的类型名。圆括号和类型名一起构成了指派运算符(type)。
比如:
int mice;
mice = 1.6 + 1.7;//第一行
mice = (int)1.6 + (int)1.7;//第二行
第一行中1.6+1.7 = 3.3然后自动类型转换,截尾后结果是3,而第二行是分别截尾,再相加,结果是2。
5、做课后题总结:
1:关于a++和++a的问题已经没问题,可是在做题中要注意的是无论先赋值后加1还是先加1再赋值,最后要用加1之后的变量去执行下面程序,而不是原变量的值,这个切记!每次都会使用原来的值而忘记使用加1后的值,原因是太关注先赋值和后赋值去了,把加1忘了!
相关文章推荐
- [C++设计模式] iterator 迭代器模式
- android中使用startActivityForResult回传数据
- 【玩转cocos2d-x之三十六】Flappy Bird大集结
- Android PullToRefresh (ListView GridView 下拉刷新) 使用详解
- android开发动画总结一(tweened animation)
- git快速入门
- BZOJ 1704: [Usaco2007 Mar]Face The Right Way 自动转身机( 贪心 )
- 让段错误更优雅一些
- java.lang.NoClassDefFoundError: com/google/gson/Gson错误的解决
- 浏览器跨域问题 jsonp
- PAT 1051. Pop Sequence (25)
- SOA架构 今天你实现了吗?
- 【玩转cocos2d-x之三十五】Earth Warrior 3D大揭秘
- 读书笔记:自定义函数实现字符串处理函数----strlen、strcmp、strcat、strcpy
- structs 2.x 框架的初步学习
- 【玩转cocos2d-x之三十四】绘图:CCDrawingPrimitives和CCDrawNode
- 【玩转cocos2d-x之三十三】游戏嵌入Webview网页
- MVC-EF数据操作(一)
- 获取android APP 签名的MD5和SHA1
- 单例模式的简单创建