C语言 unsigned 和 signed 类型相互转换深入理解
来源:互联网 发布:知秋凤凰婚庆破产了? 编辑:程序博客网 时间:2024/05/14 17:43
C语言 unsigned和 signed 类型相互转换深入理解
转载请注明出处 http://www.cnblogs.com/stonehat/archive/2011/10/14/2212141.html
转载请注明出处 http://www.cnblogs.com/stonehat/archive/2011/10/14/2212141.html
#include<stdio.h>
int main(int argc,char*argv[])
{
unsigned char a = -1;
char b =a;
printf("%d %d",a,b);
return 0;
}
//结果:255 -1
#include<stdio.h>
int main(int argc,char*argv[])
{
unsigned short a = -1;
short b =a;
printf("%d %d",a,b);
return 0;
}
//结果:65535 -1
这是两段很简单的代码,我就以第二段代码为例。
在计算机中,负数是以补码来存储的。 转载请注明出处http://www.cnblogs.com/stonehat/archive/2011/10/14/2212141.html
C语言中常量整数 -1的补码表示为0xFFFFFFFF。截取后面16位FFFF赋值给 变量a(unsigned short)。此时 a = 0xFFFF(a没有符号位,0xFFFF转换为十进制为65535)。
a又将0xFFFF,直接赋值给short b。 此时 b = 0xFFFF(但是要注意,b是有符号的,0xFFFF转换为十进制为-1)。
执行printf("%d%d",a,b);的时候,要将 a和b的值先转换为int型:
a没有符号所以转为int型为0x0000FFFF,
b有符号转换为int型为0xFFFFFFFF。
十进制输出值 65535 -1. 转载请注明出处http://www.cnblogs.com/stonehat/archive/2011/10/14/2212141.html
#include<stdio.h>
int main(int argc,char*argv[])
{
unsigned int a = -1;
int b =a;
printf("%d %d",a,b);
return 0;
}
//结果 -1 -1
转载请注明出处http://www.cnblogs.com/stonehat/archive/2011/10/14/2212141.html
a在内存中值为0xFFFFFFFF,b的值为0xFFFFFFFF,都已经32位,
a转换为int型的时候就是0xFFFFFFFF,所以输出-1.
其实,记住两点就行了
1.unsigned 类型转换为 signed类型的时候是直接复制到低位,高位为0.如果signed类型位数不够,只直接装载unsigned低位。
2.signed类型转换为unsigned类型的时候,也是将补码直接复制到低位,高位为符号位。如果unsigned位数不够,只直接装载signed低位。
- C语言 unsigned 和 signed 类型相互转换深入理解
- C语言 unsigned 和 signed 类型相互转换深入理解
- C语言 unsigned 和 signed 类型相互转换深入理解
- C语言 unsigned 和 signed 类型相互转换深入理解
- C语言 unsigned 和 signed 类型相互转换深入理解
- C语言 unsigned 和 signed 类型相互转换深入理解
- 语言 unsigned 和 signed 类型相互转换深入理解
- (C语言)signed和unsigned类型转化
- C语言中,unsigned与signed类型转换
- C语言 算术转换 unsigned signed int
- [C++] unsigned和signed类型不要混用
- 深入理解signed、unsigned 关键字
- C语言中signed与unsigned的转换
- unsigned 和 signed 的理解
- unsigned和signed的转换
- 深入理解C语言类型转换
- 关于C语言中的unsigned和signed内存存储
- C语言signed和unsigned之间的编程陷阱
- 深度学习概述:从感知机到深度网络
- C语言第三课练习
- C语言for循环
- 西门子PLC,STEP7 v5.5安装以及仿真软件Plcsim v5.4 sp5安装
- OCdemo - 05 OC中快速对数组进行排序
- C语言 unsigned 和 signed 类型相互转换深入理解
- service创建方式一
- PostgreSQL Why checkpointer impact performance so much ? - 5
- 图片 渲染为原色 ,改为镂空图
- PostgreSQL Why checkpointer impact performance so much ? - 6
- 浅析Struts1和Struts2的Action线程安全问题
- JavaScript向php传递json数据之后php解析json数据
- C语言第二课练习
- 【经典面试题】两个栈模拟一个队列