char 和 unsigned 与int 之间的转换

预备知识:整数在计算机中的表示

整数在计算机中是以二进制补码的方式表示的,以int型为例:
int有4个字节,最高位为符号位,即正数为0xxx xxxx  xxxx xxxx  xxxx xxxx  xxxx xxxx b ,例如:
[java]  view plain  copy
  1. <span style="font-size:18px;">int n = 3;</span>  
在计算机里存储为0000 0000  0000 0000  0000 0000  0000 0011b;
负数为1xxx xxxx  xxxx xxxx  xxxx xxxx  xxxx xxxx b,即将该负数的绝对值按位取反,然后加1,例如:
[java]  view plain  copy
  1. <span style="font-size:18px;">int n = -3;</span>  
在计算机里存储为1111 1111  1111 1111  1111 1111 1111 1101b;

int型转换为char和unsigned char

因为char 和unsigned char型都是一个字节,int型是四个字节的,从int 型到char 或 unsigned char型的转换都是直接将int的最低字节赋予char 或 unsigned char;例如:
[cpp]  view plain  copy
  1. char c = 3;  
  2. unsigned char uc= 3;  
3是int型,其在计算机里的存储为 0000 0000  0000 0000  0000 0000  0000 0011b;所以 c 和 uc 在计算机里的存储都为 0000 0011b,由于是正数,故值都为3;
有例如:
[cpp]  view plain  copy
  1. char c = -3;  
  2. unsigned char uc= -3;  
-3是int 型,其在计算机里的存储为 1111 1111  1111 1111  1111 1111 1111 1101b;所以c和uc在计算机里的存储都为1111 1101b;但由于char是有符号的,unsigned char 是无符号的;char c的最高位为符号位,符号位1表示负数,0表示正数,所以c的值为-3;而unsigned char uc是无符号的,所以值为253;

char和unsigned char 转换为int 型

由于char或者unsigned char是一个字节的,int型是四个字节的,当char 或者 unsigned char向int 型转换的时候,高的三个字节计算机怎么处理呢?
1、因为char是有符号的,所以int 的高三个字节都是以char的最高位(符号位去填充),例如:
当c是char型,并且在计算机里存储为1111 1101b时,
[cpp]  view plain  copy
  1. int n = c;  
n在计算机里的存储为: 1111 1111  1111 1111  1111 1111 1111 1101b,又例如:
当c是char型,并且在计算机里存储为0000 0011b时,
[cpp]  view plain  copy
  1. int n = c;  
n在计算机里的存储为:0000 0000  0000 0000  0000 0000  0000 0011b;
2、因为unsigned char 是无符号的,所以int 的高三个字节都是以0填充,例如:
当uc是unsigned char型,并且在计算机里存储为1111 1101b时,
[cpp]  view plain  copy
  1. int n = uc;  
n在计算机里的存储为: 0000 0000  0000 0000  0000 0000 1111 1101b,又例如:
当uc是unsigned char型,并且在计算机里存储为0000 0011b时,
[cpp]  view plain  copy
  1. int n = uc;  
n在计算机里的存储为:0000 0000  0000 0000  0000 0000  0000 0011b;
原文链接:http://blog.csdn.net/yifeiboss/article/details/52206072
  • 13
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值