c语言整型转换时截断危险,网易云课堂_艾叔:零基础一站式C语言|C程序设计精讲_章节5整型_课时41整型转换、扩展与截断(示例代码)...

博客探讨了C语言中不同数据类型之间的转换,包括有符号整数到无符号整数的扩展,以及字符到整数的转换。内容详细展示了如何在转换过程中处理符号位,以及发生截断的情况,并通过实例代码解释了转换过程和结果。

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

扩展:

char src;

int dst;

dst = (char)src;

src有符号,扩展位=符号位,符号位0扩展位也是0,符号位1扩展位也是1

src无符号,扩展位=0

截断:

int src;

char dst;

dst =(char)src;

从低字节开始,截取sizeof(dst)个字节的十六进制数值

整型转换,只与十六进制数值有关系

int i = -1;

整数-1

0xFFFFFFFF十六进制数值

扩展:

int to unsigned int

#include

#include

int main()

{

int int_num = -1;

unsigned int uint_num = (unsigned int)int_num;//强制转换,显式转换

printf("%x %d\n", int_num, int_num);

printf("%x %u\n", uint_num, uint_num);

system("pause");

return 0;

}

ffffffff -1

ffffffff 4294967295

请按任意键继续. . .

char to int

char to unsigned int

#include

#include

int main()

{

char char_num = -1;

int int_num = (int)char_num;

unsigned int uint_num = (unsigned int)char_num;

printf("%hhx %hhd\n", char_num, char_num);

printf("%x %d\n", int_num, int_num);

printf("%x %u\n", uint_num, uint_num);

system("pause");

return 0;

}

ff -1

ffffffff -1

ffffffff 4294967295

请按任意键继续. . .

char to int

char to unsigned int

#include

#include

int main()

{

char char_num = 1;

int int_num = (int)char_num;

unsigned int uint_num = (unsigned int)char_num;

printf("%hhx %hhd\n", char_num, char_num);

printf("%x %d\n", int_num, int_num);

printf("%x %u\n", uint_num, uint_num);

system("pause");

return 0;

}

1 1

1 1

1 1

请按任意键继续. . .

unsigned char to int

unsigned char to unsigned int

#include

#include

int main()

{

unsigned char char_num = 0xFF;

int int_num = (int)char_num;

unsigned int uint_num = (unsigned int)char_num;

printf("%hhx %hhd\n", char_num, char_num);

printf("%x %d\n", int_num, int_num);

printf("%x %u\n", uint_num, uint_num);

system("pause");

return 0;

}

ff -1

ff 255

ff 255

请按任意键继续. . .

截断:

#include

#include

int main()

{

int int_num = -0x12345678;

short short_num = (short)int_num;

unsigned short unshort_num = (unsigned short)int_num;

printf("int %x %d\n", int_num, int_num);

printf("short %hx %hd\n", short_num, short_num);

printf("unshort %hx %hu\n", unshort_num, unshort_num);

system("pause");

return 0;

}

int edcba988 -305419896

short a988 -22136

unshort a988 43400

请按任意键继续. . .

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值