C语言中,如果其中一个操作数为float型,那么运算时是将另一个操作数转换为float型,还是...
不同数据类型的数据是可以转换成同一种数据类型,然后进行计算。转换的方法有两种,一种是自动转换,一种是强制转换。自动转换发生在不同数据类型的数据混合运算时,由系统自动完成。Objective-C 编译器会遵循一些非常严格的规则,编译器按照下面的顺序转换不同类型的操作数。
①如果其中一个数是long double类型的,那么另一个操作数被转换为long double类型,计算的结果也是long double类型。
②否则,如果其中一个数是double类型的,那么另一个操作数被转换为double类型,计算的结果也是double类型。
③否则,如果其中一个数是float 类型的,那么另一个操作数被转换为float 类型,计算的结果也是float类型。
④否则,如果一个数是unisigned类型,那么另一个操作数被转换为unisigner 类型,计算的结果也是unisigner类型。
⑤否则,如果其中一个数是long long int 类型,那么另一个操作数被转换为long long int 类型,计算的结果也是long long int 类型。
⑥否则,如果其中一个数是long int类型,那么另一个操作数被转换为long int类型,计算的结果也是long int类型。
7、否则,如果其中一个数是int类型,那么其他的如Bool、char、short int、bit field、枚举类型,则全部转换为int 类型,计算的结果也是int类型。
8、unsigned 一般比同级的整形 类型高两个级别。
【例2-11】数据类型转换。
#import
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
float PI=3.14159;
int s,r=5;
s=r*r*PI;
NSLog (@"s=%i",s) ;
[pool drain];
return 0;
}
s=78
本例程序中,PI 为实型,s、r 为整型。在执行s=r*r*PI 语句时,r 和PI 都转换成double型计算,结果也为double型。但由于s为整型,故赋值结果仍为整型,舍去了小数部分。
强制类型转换是通过类型转换运算来实现的,其一般形式为:
(类型说明符) (表达式)
其作用是把表达式的运算结果强制转换成类型说明符所表示的类型,例如:
(float) a //把a 转换为实型
(int) (x+y) //把x+y 的结果转换为整型
在使用强制转换时,应注意以下问题:类型说明符和表达式都必须加括号(单个变量可以不加括号),如把(int)(x+y)写成(int)x+y 则成了把x 转换成int 型之后再与y 相加了。另外,无论是强制转换或是自动转换,都只是为了本次运算的需要而对变量的数据长度进行的临时性转换,而不改变数据声明时对该变量定义的类型。
【例2-12】强制类型转换实例。
#import
int main (int argc, const char * argv[])
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
float f=5.75;
NSLog (@" (int) f=%i,f=%f", (int) f,f) ;
[pool drain];
return 0;
}
【程序结果】
(int) f=5,f=5.750000
本例表明,f 虽强制转为int 型,但只在运算中起作用,是临时的,而f 本身的类型并不改变。因此,(int)f的值为5,删去了小数,而f的值仍为5.750000。
3.14默认是在double形式存在的,这是规定,就像法律一样,只能死记,没有道理而言。r是float型,转换为double型会有丢失数据的可能,但是编译器并不能完全确定,到底会不会丢失数据,因此,出名对你的安全,编译器会给你一个警告,当然3.14这样的数肯定不会丢失,可以不用理会他这条警告。
当不同类型的表达式和变量混合使用一个表达式时,它们将被转换为同一类型。
转换后每对操作数都成为同一类型,运算结果后的类型与转换后的结果相同。
转换规则为.只要两个操作数中有一个是double型的,则另一个会转换为double型.否则只要有一个是float型的,另一个会转换为float型.否则,有一个是long型的,另一个会转换为long型.否则两个操作数都会转换为int型.其转换规则如下图.
对于不同种数据类型 对于一个是整型和一个是浮点类型的 要将整型转换成浮点类型
如 float 和其他整型数据 系统会将整型转化成float
对于两个都是float的数据 不会进行转化成double类型
若是float和double类型的 系统会将float转换成double
会转换成更高级的数据类型,以提高计算精度。例如:float->double;char->int等
有一个操作数为float型的话,会将float型数和另外一个操作数都转换成double型数据运算,以提高精度。
转化为double再进新运算,c语言中只会向更高级的数据类型转换,这里说的高级是指精度更高的数据类型。同类型的数据运算不用转换。
双斜线是什么运算符号
举个例子,当我们使用单斜杠进行除法运算时,不论操作数的数据类型如何,结果都会是float型。例如,11\/9的结果是1.2222222222223。而使用双斜杠进行整数除法时,如果A和B都为int型,结果为int型;如果其中一个操作数为float型,则结果为float型。值得注意的是,在使用双斜杠进行除法运算时,如果两个操作...
c语言中true和false
在C语言中,求出true或false的方法涉及到逻辑与(&&)和逻辑非(!)运算符。逻辑与运算符的优先级高于逻辑非,但低于比较运算符。当使用逻辑与运算符时,只有当两个操作数都为真时,结果才为真。如果其中任何一个操作数为假,结果即假。1. 表达式 `4 >= 3` 返回true。2. 表达式 `'A' < 'B...
c语言中除法运算规则
c语言中除法运算规则如下:1.整数除法:如果两个操作数都为整数类型,那么除法运算得到的结果也是整数类型,即舍去小数部分。例如,5\/2的结果是2。2.浮点数除法:如果其中一个操作数是浮点数类型,那么除法运算的结果也是浮点数类型。例如,5.0\/2的结果是2.5。3.除数为0:在进行除法运算时,除数不能...
逻辑&&是什么意思?
在C语言中,&&是逻辑与(Logical AND)运算符。当两个操作数都为真(非零)时,该表达式的结果为真(1)。如果其中一个操作数为假(0),则结果为假(0)。逻辑与运算符具有短路特性,即当第一个操作数已经可以确定整个表达式的结果时,就不再计算第二个操作数。换句话说,如果第一个操作数为假...
Java中三目运算符为何会导致 NPE?
当使用三目运算符时,如果其中一个操作数为null,编译器会进行自动拆箱操作。以下是一个示例代码,展示了如何引发NPE:Exception in thread "main" java.lang.NullPointerException 通过反编译工具,我们可以看到编译器在代码的最后一行进行了自动拆箱操作,导致对null对象的调用,进而引发NPE。在Java中,当...
java中char的运用问题?
若其中一个操作数是double类型,另一个操作数将会被转换为double类型进行运算。若其中一个操作数是float类型,另一个操作数将转换为float类型进行运算。如果其中一个操作数是long类型,另一个操作数将会转换为long类型进行运算。最后,如果两个操作数都不是上述类型,那么它们都将被转换为int类型进行运算。
c语言中什么是逻辑或
在C语言中,逻辑或(Logical OR)是一种用于布尔值(true或false)的逻辑运算,其操作符为`||`。当使用逻辑或运算符连接两个表达式时,如果任一表达式的值为真(非零),则整个表达式的结果为真;只有当两个表达式的值都为假(零)时,结果才为假。逻辑或运算常用于条件判断中,以检查多个条件中...
15%-4=-1
C或者C++里面对于负数取模是有规则的规则一: 余数和除数同号规则二: |余数| < |被除数|如果商-3时余数为3,如果商-4时结果是负1正确。
C语言,将数字和字符串拼成一个字符串。用宏来做,用api谁都会!_百度...
如果其中一个操作数是宏参数,“粘合”会在当形式参数被相应的实际参数替换后发生。考虑下面的宏: #define MK_ID(n) i##n 下面的声明使用MK_ID创建了3个标识符: int MK_ID(1), MK_ID(2), MK_ID(3); 预处理后声明变为: int i1, i2, i3; 例如: #include <stdio.h>#define strcat(x,y) x...
假设A=true,B=false,C=true,D=true,逻辑运算表达式A∧B∨C∧D的值是...
B为false,两者进行与运算得到false。5. C∧D的结果是true,因为C和D都为true,两者进行与运算得到true。6. 接着,将这两个结果进行逻辑或(∨)运算。7. false∨true的结果是true,因为逻辑或运算只要有一个操作数为true,结果就为true。8. 因此,表达式A∧B∨C∧D的最终值是true。