单选题 在C语言程序中,下列表达式中值为True的有______。
Ⅰ.123456789==(int)(float)123456789
Ⅱ.123456==(int)(flat)123456
Ⅲ.123456789==(int)(double)123456789
  • A.Ⅰ、Ⅱ
  • B.Ⅰ、Ⅲ
  • C.Ⅱ、Ⅲ
  • D.Ⅰ、Ⅱ、Ⅲ
【正确答案】 C
【答案解析】[解析] 解答本题需要有一定的C语言基础。 ·在C语言中,float类型对应IEEE 754标准的单精度浮点数格式,也即float型数据的有效位数只有24位(相当于有7位十进制有效位数)。 ·doubte类型对应IEEE 754标准的双精度浮点数格式,有效位数有53位(相当于有17位十进制有效位数)。 ·int类型为32位整数,有31位有效位数(最大数为2147483648)。 整数123456789的有效位数为9位,转换为float型数据后发生了有效位数丢失,再转换为int型数据时,已经不是123456789了,所以,选项Ⅰ“123456789==(int)(float)123456789”两边的值不相等,故该表达式为False。 数据改为123456后,有效位数只有6位,转换为float类数据后有效位数没有丢失,因而数值没变,再转换为int型数据时,还是123456,所以,选项Ⅱ“123456==(int)(float)123456”两边的值相等,故该表达式为True。 整数123456789的有效位数为9位,转换为double型数据后,不会发生有效位数丢失,再转换为int型数据时,还是123456789,所以,选项Ⅲ“123456789==(int)(double)123456789”两边的值相等,故该表达式为True。 综上所述,Ⅱ和Ⅲ的值都为True,故选C。