weixin_43249053 2018-09-26 14:27 采纳率: 100%
浏览 849
已采纳

int型赋给char型,按%u和%d输出结果的问题

图片说明
我看书上说,多字节赋值给低字节的,只将其低字节原封不地送到该变量。
可如图,我定义的char c,按%u输出的时候,变成4字节的了。

问题1,按%u和%d输出时,实质是转换成了无符号都int和有符号的int输出的,
所以我定义的char c,输出时候由1字节的char先变成4字节的int型,再按是否有符号输出。我这样说没错吧?
图片说明

问题2,虽然定义了 unsigned char c,当128赋值给c后,c的值在计算机中以1000 0000储存。为,而以%d输出时是正值,为什么?

  • 写回答

2条回答 默认 最新

  • threenewbee 2018-09-26 15:08
    关注

    第一个问题,注意,是多字节变成1个字节,而不是反过来,代码如下:

     #include <stdio.h>
    
    int main () {
        int a = 0x12 * 256 + 0x34;
        printf("0x%x", (char)a);
        return 0;
    }
    

    结果

    0x34

    第二个,需要强制转换成有符号数

    #include <stdio.h>
    
    int main () {
        unsigned char a = 128;
        printf("%d", (char)a);
        return 0;
    }
    

    结果
    -128

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?