document.write('

B

[解析] 在Java语言中,当参与运算的两个变量的数据类型不同时,就需要进行隐式的数据类型转换,转换的原则为:从低精度向高精度转换,即优先级满足 byte<short<char<int<long<float<double。例如,不同数据类型的值在进行运算时,short类型数据能够自动转换为int型,int类型数据能够自动转 换为float等。反之,则需要通过强制类型转换来实现。在Java语言中,类型转换可以分为以下几种类型:

(1)类型自动转换

低级数据类型可以自动转换为高级数据类型,下表给出常见的自动转换的条件。

\"360截图20190817222023798.jpg\"

当类型自动转换时,需要注意以下几点内容: 1)char类型的数据转换为高级类型(例如int、long等),会转换为对应的ASCII码。 2)byte、char、short类型 的数据在参与运算的时候,会自动转换为int型。但当使用+=运算的时候,就不会产生类型的转换。 3)在Java语言中,另外一个与C/C++语言不同的地方 是,基本数据类型与boolean类型是不能相互转换的。 总之,当有多种类型的数据混合运算时,系统首先自动将所有数据转换成容量最大的那一种数据类 型,然后再进行计算。 (2)强制类型转换 当需要从高级类型转换为低级数据类型的时候,就需要进行强制类型转换,下表给出可以进行强制类型转换的条件。

\"360截图20190817222109052.jpg\"

需要注意的是,在进行强制类型转换的时候可能会丢失精度。

对于本题而言,赋值语句long temp=(int)3.9的过程如下:首先,把浮点数3.9强制转化为int类型,在转换的过程中会直接丢掉小数部分,转换结果为3, 接着在赋值给long型变量temp的时候,会隐式地将该值转换为long类型,由于是从低精度向高精度转换,所以,在转换过程中不会有精度丢失,转换结果 仍然为3;接着执行语句temp%=2,该语句等价于temp=temp%2,用来求temp除以2的余数,3%2,显然,结果为1。所以,选项B正确。

');