C语言整型在计算机的储存

如果你是要弄清楚整型在计算机中的二进制存储情况的话那么你来对了地方
在这里我们用二进制位的比较少的2字节(byte)int来做介绍
2字节=16个二进制位
int字节与二进制介绍以及有无符号的差别

有符号的整型第一个二进制位是用来储存符号的   0是正数   1是负数
正数的原码=反码=补码
负数反码:原码符号位不变其他位按照原码对比  原码是10)反码就是01)  简称按位取反
负数补码就是简单地反码+1
如下图

有些人可能会想如果一个数的反码是1111 1111 1111 1111 反码+1求补码不就超出范围了吗 我们往回推这个数

首先它是个负数其次根据按位取反
这个数的原码是 1000 0000 0000 0000没错这个数是-0
这么推没错 可惜不存在-0的补码也就是因为以上的原因(至于0有+0嘛)

首先明确计算机不算减法只算加法3-2——>3+(-2)

计算机储存整型都是用补码
至于为什么用补码

3 -2
原码: 0000 0000 0000 0011 1000 0000 0000 0010
反码:0000 0000 0000 0011 1111 1111 1111 1101
补码:0000 0000 0000 0011 1111 1111 1111 1111

上面两个数加一下相信你就会明白为什么用反码来储存了
原码相加符号位是1 ,3-2负数?
反码相加最后数字会是0,连符号位都被后来进的数给挤出去了(溢出)
补码最后符号位溢出就成了0000 0000 0000 0001(补码)
现在符号位就是0了即原码等于补码(得出的数是1)
这就是计算机为什么用二进制补码储存整型

发布了22 篇原创文章 · 获赞 40 · 访问量 890

猜你喜欢

转载自blog.csdn.net/xlwhg/article/details/104206143
今日推荐