C语言带符号整形的转换

C语言带符号整形的转换,第1张

前言:

之前写python脚本发现,当将负数转换为字符型时会发生报错,而C语言则会正常输出,于是着重了解了相关知识。


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 对于负整形转换为字符型没有相关算法,如果有大佬知道,请务必告诉我!!!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/585384.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-12
下一篇 2022-04-12

发表评论

登录后才能评论

评论列表(0条)

保存