本文是《C编程语言》P35页有符号到无符号类型数据转换的小测试。测试环境int类型占用4字节,long类型占用4字节。
代码:
#include
main() {
unsigned int i = 1U;
signed long j = -1L;
printf("i的无符号类型是:%u,n", i);
printf("i的有符号类型d:%d,n", i);
printf("j的有符号类型ld:%ld,n", j);
printf("j的无符号类型u:%lu,n", j);
printf("i>j?%dn", i > j);
system("pause");
}
运行结果:
可以看出c语言有无符号区别,signed long 转换后变成了一个大数。我们知道有符号类型是使用补码存储在计算机中的。本例中 long 类型(假设为 32 位)的原始代码为:
1000-0000-0000-0000-0000-0000-0000-0001
补语是:
1111-1111-1111-1111-1111-1111-1111-1111
当转换为无符号数时c语言有无符号区别,评估此补码大小的规则发生了变化。第一个1位不再作为判断正负的符号,而是作为一个真数。结果是:
2^32-1=4294967295
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 找不到素材资源介绍文章里的示例图片?
- 欧资源网