计算机整数的表示

1.正负数的编码形式

在整数的表示中,有两种不同的表达方式,一种只能表示非负数,而另一种能够表示负数,零和正数。

char [-128,127]									char [0,255]
short [-32768,32767]							short [0,65535]
int [-2147483648, 2147483647]					int [0,4294967295]

不同类型的位数的机器会有不同的取值范围

就以short v = 12345;而言,它得二进制编码就为 0011 0000 0011 1001
那么short v = -12345呢?
我们都知道12345 + (-12345) = 0
所以负数,在常见得计算机表示方式,使用的就是补码形式
例如

[0001] = - 0 *  (2 * 2 * 2) + 0 * (2 * 2) + 0 * (2 * 1) + 1 * (1) = 0 + 0 + 0 + 1 = 1
[1111] = - 1 *  (2 * 2 * 2) + 1 * (2 * 2) + 1 * (2 * 1) + 1 * (1) = -8 + 4 + 2 + 1 = -1

[0001] + [1111] = 1[0000] 因为只保存4位所以 = [0000] = 0

因此short v = - 12345 的二进制编码为:1100 1111 1100 0001

2.有符号数和无符号数之间的转换

C语言允许在各种不同的数字数据类型之间做强制类型转换
例如 :
short v = -12345;
unsigned short uv = (unsigned short) v;
printf(“v = %d, uv = %u \n”, v, nv);

v = -12345, uv = 53191

unsigned u = 4294967295u;
int tu = (int) u;
printf(“u = %u, tu = %d \n”, u, tu);

u =4294967295, tu = -1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值