首页 > 代码库 > unsigned无符号、有符号类型的转换
unsigned无符号、有符号类型的转换
先看一段代码
#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无符号、有符号类型的转换
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。