首先,你得明白什么是数据类型?我们知道数据在内存中存储都是按照字节为单位存储的,如何来表示一个整形或一个字符型等等数据,这就要用到数据类型了,所以,所谓的数据类型,其实就是用来标识数据占据几个字节等信息参数的,系统数据类型很好理解,自定义的数据类型(如用struct或class来定义的),其实也是一样的,它里面包含了各个简单数据类型的长度和位置。 其次,C++中的数据是“强类型”的,也就是说数据在进行赋值时,类型必须匹配才行,这很容易理解,如果两个数据的在内存中的长度都不一致,又怎么能赋值呢,即使长度一致,如果内部的小单位有偏移,其实也是不能赋值的,这就是数据类型要匹配的原因了,呵呵,例如:struct{char a, char b, char c, char d};和int型其实长度是一致的,都是4个字节,但其内部每个字节表示的具体意义是不一样的。 当然C++也提供了数据转换的机制,自动转换和强制转换。C++的内部转换是char/short->int/long/float->double,也就是说将一个char值赋值给一个int型的,不需要你做操作,系统会自动转换,这样的转换时不会丢失数据的,但如果反过来,编译器就会报错了,原因很简单,数据有可能丢失了,比如将一个double类型的数据转换为int型,就丢失了内存中一半的数据,当然如果丢失的那部分是无意义的,这是的强制转换是有效的,如将int型的(-127,127)之间的数据转换为char型是有效的。 数据在作为函数参数传递的时候,也必须匹配类型,原因很简单,函数参数的传递是通过栈来完成的,如果参数类型不一致,会导致栈里的数据紊乱,传递的参数错位,而导致错误。例如你给pow求幂函数,原型是double pow(double d,int i);如果你传入的参数是(int,int),这显然在数据类型转换下是可行的;但如果你传的是(double,double)这时的第二个参数就编译不通过,如果强制转换,编译通过,但数据有可能会丢失了。
理论上所有数据类型之间都可以运算,包括所有运算。数据在内存都是以二进制数字存在,不管是加减乘除,还是左移右移都没问题。
除了指针类型(数组类),其他的基础类型什么运算都可以啊,就是算完后赋值类型要对