如何区别二进制32个1表示-1,还是4294967295

小编 678

二进制意义上是不能区分32个1表示-1,还是4294967295。实际上,32个1可以有无数种意义,所以才有了类型这种东西。一段内存到底表示什么,依赖于你如何解释它,而不仅仅是看里面每一位的状态。

1.二进制意义上不能区分

无论是-1还是4294967295,二进制意义上这个是不能区别的,同样的32个1可以有无数种意义,所以才有了类型这种东西。不仅不同类型的数据之间不做区分,连数据和代码都不做区分。当然实际的系统会有一些措施进行一定程度的区分,比如数据和代码分段存储、设置可执行权限等来提高系统的安全性,防止恶意攻击。

一段内存到底表示什么,依赖于你如何解释它,而不仅仅是看里面每一位的状态。比如在C语言里,有一段内存是连续32个1,你把它按照一个int来解读就是-1,按照unsigned int来解读就是4294967295,甚至你还可以把它当成一个指针、一条指令来解读,全凭个人的喜好。

2.计算机解码过程不需要区分

也许32个1用来表示4294967295在数学上非常有道理,因为刚好是2的32次方减1,刚好是二进制和十进制之间的相互转换。如果画一个表,里面把从32个0到32个1的所有二进制排列都对应一个十进制数,可不可以?当然没有问题。反正从二进制排列这个集合到十进制数这个集合存在着一个一一映射关系,这个关系就是我们的编码和解码方式。之所以选择二进制和十进制之间的相互转换,是因为它较好理解,也较好实现。但这里的映射,是数学上的;而计算机解码的过程不可能真的去查表,只需要结果正确就可以了。这种映射,不仅仅是从二进制排列集合到十进制数集合的,也可以是从二进制排列集合到其他任何东西的。只要我们规定了编码和解码方式,它就可以准确无误地用来表达我们想要的信息。

延伸阅读

什么是二进制

二进制是计算技术中广泛采用的一种数制。二进制数据是用0和1两个数码来表示的数。它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”,由18世纪德国数理哲学大师莱布尼兹发现。当前的计算机系统使用的基本上是二进制系统,数据在计算机中主要是以补码的形式存储的。计算机中的二进制则是一个非常微小的开关,用“开”来表示1,“关”来表示0。

20世纪被称作第三次科技革命的重要标志之一的计算机的发明与套用,因为数字计算机只能识别和处理由‘0’.‘1’符号串组成的代码。其运算模式正是二进制。19世纪爱尔兰逻辑学家乔治布尔对逻辑命题的思考过程转化为对符号”0”.”1”的某种代数演算,二进制是逢2进位的进位制。0、1是基本算符。因为它只使用0、1两个数字元号,非常简单方便,易于用电子方式实现。

回复

我来回复
  • 暂无回复内容

注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部