计算机二进制存储,补码、反码

catalog

我们知道,一个int a = -3, 他的二进制是:

  • 3的二进制 0...011,取反1...100,加1,1...101

那么,什么叫做: (一个数的 二进制)呢???


一个数的二进制,表示: 该数,在计算机里的 存储形式!

一定要清楚: 计算机里只有0和1!!! 他没有(正数和负数)的概念!!!


举个很好的例子:

int a = 0x80102030a的地址是:p1,即[p1, p2, p3, p4]这些地址是a变量的

千万不要认为:([p1, p2, p3, p4])这些地址,就是属于 a变量的!!!
这个观点是极其错误的!!!(任何一个地址,都不属于任何变量。 只是说 a变量,只是指向了 p1这个地址而已!!

因为: 你可以单独 取出p1/p2/p3/p4地址的内容。 ((char *)p3;

虽然a是个负数,他在计算机存储的是:[80] [10] [20] [30]

但在计算机里,完全不存在 正数负数的概念。 计算机只知道0/1,不知道是char、bool、int、string、、、、

即:(int *)p1,这就获得了:(int)0x80102030,即结果是个负数
(unsigned int *)p1,这就获得了:(unsigned int *)0x80102030,即结果是个正数!


计算机也不是 是(int*)的指针,这是C语言做的。

因为,计算机最小存储单元,是1个字节

即,一个字节里,存的是:[0, ff]

比如,一个字节单元里,存的是:ff,其实你完全不知道,这是个正数还是负数!!!

计算机的字节单元里,就是存的:[0, ff]
即,从计算机的角度,(其实都是:unsigned的!!!)


比如说,一个单元里存的,都是1。
你的程序要用到这个存储单元 他的地址是p,则:

  • 第一步: 先获取,该单元的原生数据!!! auto d = (unsighed char)p
    此时这个d的值为 255,就代表: 该存储单元里,存储的原生数据!!
  • 第二步: (其实第二步就不重要了),这完全取决你,你想要把它(强转到)什么类型。
    如果,就当unsigned来用 则值为255。 否则,当成负数来用(强转到signed) 则值为-1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值