对不同类型的C语言变量进行算术运算会有问题吗?
C有三类固有的数据类型:指针类型、整数类型和浮点类型。
指针类型的运算限制最严,只限于以下两种运算:
- 两个指针相减,仅在两个指针指向同一数组中的元素时有效。运算结果与对应于两个指针的数组下标相减的结果相同。
+ 指针和整数类型相加。运算结果为一个指针,该指针与原指针之间相距n个元素,n就是与原指针相加的整数。
浮点类型包括float,double和longdouble这三种固有类型。整数类型包括char,unsigned char,short,unsigned short,int,unsigned int,long和unsigned long。对这些类型都可进行以下4种算术运算:
+ 加
- 减
* 乘
/ 除
对整数类型不仅可以进行上述4种运算,还可进行以下几种运算:
% 取模或求余
>> 右移
<< 左移
& 按位与
| 按位或
^ 按位异或
! 逻辑非
~ 取反
尽管C允许你使用“混合模式”的表达式(包含不同类型的算术表达式),但是,在进行运算之前,它会把不同的类型转换成同一类型(前面提到的指针运算除外)。这种自动转换类型的过程被称为“运算符升级(operator promotion)”。
指针类型的运算限制最严,只限于以下两种运算:
- 两个指针相减,仅在两个指针指向同一数组中的元素时有效。运算结果与对应于两个指针的数组下标相减的结果相同。
+ 指针和整数类型相加。运算结果为一个指针,该指针与原指针之间相距n个元素,n就是与原指针相加的整数。
浮点类型包括float,double和longdouble这三种固有类型。整数类型包括char,unsigned char,short,unsigned short,int,unsigned int,long和unsigned long。对这些类型都可进行以下4种算术运算:
+ 加
- 减
* 乘
/ 除
对整数类型不仅可以进行上述4种运算,还可进行以下几种运算:
% 取模或求余
>> 右移
<< 左移
& 按位与
| 按位或
^ 按位异或
! 逻辑非
~ 取反
尽管C允许你使用“混合模式”的表达式(包含不同类型的算术表达式),但是,在进行运算之前,它会把不同的类型转换成同一类型(前面提到的指针运算除外)。这种自动转换类型的过程被称为“运算符升级(operator promotion)”。