c语言返回不确定数据类型的,C语言隐式数据类型转换

本文介绍了C语言中的隐式数据类型转换,包括算数运算式、赋值表达式、函数参数传递和函数返回值时的情况。通过具体例子说明了转换规则,并解释了一段C程序的执行结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C的隐式数据类型转换:

C语言中发生隐式数据类型转换的4种情况:

1.算数运算式中

2.赋值表达式中

3.函数调用参数传递时

4.函数返回返回值时

1.算数运算式中

进行算数运算时,不同数据类型必须转换成同一数据类型,才能进行运算。

1、字符必须先转换为整数

2、short型转换为int型

3、float型数据在运算时一律转换为双精度(double)型,以提高运算精度

4、在进行运算时,以表达式中所占字节最多的数据类型为主,其他数据的类型均转换为这种数据类型,再进行运算。

转换规则:

char,short ——>int——>unsigned——>long——>double

2.赋值表达式中

进行赋值操作时,赋值运算符右边的数据类型必须转换成赋值号左边的类型,若右边的数据类型的长度大于左边,则要进行截断或舍入操作。

3.函数调用参数传递时

系统会隐式地将实参数据类型转换为形参数据类型后,再赋给形参。

4.函数返回返回值时

系统会隐式地将返回表达式的数据类型转换为函数返回值类型,再返回。

5.例题:

下列C程序执行后c输出结果为( )

#include

#include

void main()

{

int a = -3;

unsigned int b = 2;

long c = a + b;

printf("%ld\n",c);

}

A.-1

B.4294967295

C.0x7FFFFFFF

D.0xFFFFFFFF

答案:(32位机器)A、(64位机器)B

先来补充点知识。

反码:正数的反码与原码相同; 负数的反码是对其原码逐位取反,但符号位除外。

内存中存放的是补码,正数的原码就补码,负数的补码是在其反码的末尾再加1。

正数的补码是原码,负数的补码是其原码除符号位外,按位取反再加1。

int型变量的取值范围是-2^31~2^31-1

正数:00000000 00000000 00000000 00000001~01111111 11111111 11111111 11111111。(原码补码一样)0~2^31-1

负数原码:10000000 00000000 00000000 00000001~11111111 11111111 11111111 11111111(-1~-(2^31-1))

负数补码:10000000 00000000 00000000 00000001(-(2^31-1))~11111111 11111111 11111111 11111111(-1)

还有一个数是10000000 00000000 00000000 00000000,不能用补码公式进行计算,计算机内部直接用它来表示-2^31。(-2^31原码补码都是它)

结束。

对于int a=-3

用二进制表示其原码是 10000000 00000000 00000000 00000011

用二进制表示其反码是 11111111 11111111 11111111 11111100

用二进制表示其补码是 11111111 11111111 11111111 11111101

对于unsigned int b=2

用二进制表示其原码是 00000000 00000000 00000000 00000010

算术运算时都转换为unsigned int

11111111 11111111 11111111 11111101

00000000 00000000 00000000 00000010

11111111 11111111 11111111 11111111

在32位机器上long是4字节,有个符号位,放不下2^32-1,所以会变为-1。

在64位机器上long是8字节,放得下2^32-1,所以得到答案4294967295。

下面代码输出什么

#include

int main( )

{

unsigned int a = 6;

int b = -20;

(a + b > 6) ? printf(">6") : printf("<=6");

return 0;

}

输出结果是 ( )

答案:>6

a+b算术运算会转换成unsigned int 得到数很大,肯定是>6的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值