之前写python脚本发现,当将负数转换为字符型时会发生报错,而C语言则会正常输出,于是着重了解了相关知识。
当有符号整数转换为整数或浮点类型时,如果原始值可以在结果类型中表示,则该值不变。
int i = -3;
float u;
double d;
d = i;
u = i;
printf("%f",d); // -3.0000000
printf("%f",u); // -3.0000000
整形转换为无符号短整型
当有符号整数转换为更大的整数时,该值将被符号扩展。
当转换成较小的整数时,高序位将被截断。
int i = -3;
unsigned short u;
u = i;
printf("%hu",u); // 65533
// %hu表示以无符号短整型输出
short 占两个字节,所以 u = 0xFFFF + (- 3) ,即 65533
有符号整形转换为字符型
标准ASCII表只定义了0~127的字符,在128及其以上的ASCII码不在ASCII码标准表中,没有扩展编码的情况下将大于等于128的整形强制类型转换大多数为乱码,而对于 -256 ~ -0的编码类似于负整形转换为无符号短整型。
for(a = -256; a < 0; a++)
{
printf("%c",a);
//123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
}
即输出为 0xff + a 的ASCII码
结语详情可以看一下两篇文章:
从带符号整形的转换
C语言和C++中的类型转换
通过这次对于字符转换的了解,大致明白了部分字符转换的原理,如有不对欢迎指正,以及仍然不知道为啥 python 对于负整形转换为字符型没有相关算法,如果有大佬知道,请务必告诉我!!!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)