码迷,mamicode.com
首页 > 其他好文 > 详细

unsigned无符号、有符号类型的转换

时间:2016-11-21 08:42:25      阅读:154      评论:0      收藏:0      [点我收藏+]

标签:数字   print   存储   补码   style   原码   log   int   高精度   

先看一段代码

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

 

a输出为255,b输出为-1。原因在于无符号类型和有符号类型像高精度转化时候不一样。

char类型长度是1个字节8位,而数字在计算机中是以补码形式存储的。 所以a=-1在计算机内对应的值是0xFF。把a赋给b,b的值也是0xFF。

输出时候,printf会把a、b转化为int类型。而int类型是4个字节32位。关键在于char怎么转化为int。

转换的原则:有符号signed类型像高精度类型转换时候,前面补1;无符号unsigned类型像高精度类型转换时候,前面补0。

所以a是unsigned类型,char比int少了24位,在前面补0,a的值变成了0xFFFF FFFF。

b是signed类型,在前面补1,b的值变成了0xFFFF FFFF。

最后输出时候要把补码变成原码输出。

a的值是正数,补码是他本身,输出为255,b的补码求出来是-1。

unsigned无符号、有符号类型的转换

标签:数字   print   存储   补码   style   原码   log   int   高精度   

原文地址:http://www.cnblogs.com/betterluo/p/6084087.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!