今天咱说说C语言的类型转换和运算符的传奇故事,前面已经有接触过基本的几个算术运算符了:加(+),减(-),乘(*),除(/),取模(余数)(%)
现在咱再学习下除(/),取模(余数)(%)的用法。
如果是2个整数进行相除那就要注意了,如 int i = 5/2;那么i的值是多少呢,千万别当成是2.5了;记住i是整型变量,所以多余的小数部分就舍去了,所以i的值是2。那么double i = 5/2; 那么i的值是多少呢?也别当成是2.500000了,结果是2.000000为什么呢,因为系统做这个运算的时候是这样的,5,2都是整数所以先按整数的方式进行除法得到整数值 2将整数2转化为double得到结果2.000000.如果要正确得到小数值怎么做呢?可以这样double = (double)5/2,先将5转化为double型变量就行了。
不要迷茫,类型转化是很简单的事,前面讲过集中类型大小的排序,现在在看一下:char < short < int < long < float < double
类型转化分为2种:一.隐式强制类型转化 二.显示强制类型转换。类型转化是啥呢?顾名思义,看名字就知道啦,将一种类型的数据转化成另一种类型的数据呗。比如:将char类型的数据转化为int型数据或者将int类型数据转化成char类型数据这都叫类型转化。
那么什么是隐式强制类型转化 呢,就是由编译器自动转化的。比如运算的时候char short都是自动转化为int进行运算的,float都是自动转化为double进行运算的。因为后者表示数的范围比较大,所以把前者当后者用是可以的。再看这个double i= 5.0/2;这个i的值也是2.500000。编译器是这样的实现的:5.0并不是整数,而是小数,所以自动转化为double参与运算。在计算的过程中,以类型表示范围最大的那个类型为主,都自动转化为那个类型进行运算。比如int i=10; long j = 100; long k = i+j;因为long在运算中优先级最高,表示的数范围最大,所以都转化成了long进行计算。这就是隐式强制类型转化。
下面看看显示强制类型转化,char < short < int < long < float < double从左边到右边的转化都是隐式类型转化。因为不会出错,反过来就不一定了。你比如char的范围是-127~128 无符号char 0~255 char的范围就这么点,我要将int i = 1000,转化成char类型,那么这样就是错误的转化了。那么什么时候使用强制类型转化呢? 2个条件,1.你需要进行强制类型转化2.你明确的知道强制类型转化的结果。什么叫你明确的知道强制转化的结果呢? 比如将1000转化成char就是错误,你很清楚,所以不可以转化。但是int i = 97;这个你明确的知道转化过去不会出错,那么你就进行强制类型转化。char ch = (char)97; ch的值就是'a'了。只有你明确的知道转化不会出错的时候你才可以强转。强制类型转化的写法就是在需要强转的数居前加上小括弧里面写你要强转的类型就可以了。
还有就是这种情况了 double = (double)5/2;你需要转化,则转之。
取模运算又号称取余数运算,如5%2 == 1;==符号叫做等于而 = 符号是赋值两者要区分。5%2的结果实际上是数学中5除以2的余数。
再如10%4 == 2;1%10 ==1;2%10==2;这种前面小后面大的情况 取模就是前面的值。10%10 == 0。表示除的尽。10/10是整数,则20%10也是0.
下面讲解另一种类型bool,和逻辑运算符 与(&&) 或(||) 非(!)。
bool很简单,就2个值真和假:true,false; 什么叫真呢,就是正确的逻辑,正确的运算比如2>1 这个整体 就是对的那么bool bl = 2>1;则bl的值是true,如果bool bl = 1<2;则bl的值就是假false了。
&& 用法如 bl1 && bl2;bl1可以是个表达式如(1>2)总之bl1,bl2最终的结果是个bool类型的值。
如果bl1,bl2都是真的时候 bl1&&bl2 的值才是真,有一个为假则 bool bl = bl1&&bl2;这个bl都是假false。
||用法如bl1||bl2 只要有1个是真,则整体为真。
!用法如 !bl, bl是真则 !bl是假 bl是假 则 !bl是真.
bl1 bl2 && ||
true true true true
true false false true
false true false true
false false false false