C Primer Plus 第五章:运算符、表达式和语句

来源:互联网 发布:linux 实验三 vi编辑器 编辑:程序博客网 时间:2024/05/16 04:42

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忘了!



0 0
原创粉丝点击