美文网首页js css html
有符号数和无符号数

有符号数和无符号数

作者: flyjar | 来源:发表于2023-03-09 09:35 被阅读0次

学习了二进制数据,我们知道,在计算机系统中,存储的任何数据都是以二进制数据的格式存储。存储数据的最小单位是字节(Byte),一个字节的容量是八位(bit),可以存储8个二进制数据。在讲解“有符号数”和“无符号数”之前,我们先来举一个例子。

例如,有个人(称呼A)去爬山,半路上碰到一个朋友,朋友送了他一瓶水,此时A手上拥有一瓶水;那么,有如下的情况:

(1) 如果A觉得渴,那么,A觉得手上的这瓶水很宝贵,就把这瓶水喝掉;

(2) 如果A觉得不渴,那么,A觉得手上的这瓶水很重,麻烦,就丢掉;

(3) A手上的那瓶水,永远是那瓶水,本身没有任何变化。但是,A以不同的角度来看这瓶水,那么,会得到不同的结果。

在这个例子中,可以进行比较,如下:

(1) 人员A就如同一个计算机系统;

(2) 人员A手上拿有一瓶水,就如同计算机内存中,一个字节存储的一个数值;

(3) 例如,在内存的一个字节中存储255这个整数值。那么,一个字节中的255这个数值,永远是255,不会有任何改变。但是,计算机系统把255这个数值,以不同的角度来看待,会有不同的结果。

那么,在计算机系统中,可以把内存中存储的数值当做“有符号数”和“无符号数”来看待。同一个数值,以不同的角度来看待,有不同的结果。

下面,我们来看看计算机系统对“有符号数”和“无符号数”的处理。

有符号数的定义是:字节的最高位作为符号位,其余的是数值位。例如一个字节中存储的二进制数为1100 1000,最高位1作为符号位,其余的7位 100 1000 作为数值位。

那么,符号位占据1位,就有0和1这样的两种数值,就有:

(1) 如果符号位为0,那么字节中存储的数值是正数;

(2) 如果符号位为1,那么字节中存储的数值是负数;

对于1100 1000这样的二进制数据,符号位是1,就表示负数。在有符号数中,表示负数的算法是:

(1) 把数值位中存储的二进制数据,每个位都取反,就是原来为0的值变为1,原来为1的值变为0;

(2) 给对取反后的二进制数据加1,得到的数值就得到负数值;

所以,有符号数可以表示正数,也可以表示负数。

无符号数的定义是:没有符号位,所有的位数都是数值位。所以表示的都是正数。

例如1100 1000这个数值,如果作为有符号数看待,那么符号位是1,数值位是100 1000。所以,符号位是1,所以,这个数据是负数。然后,表示成十进制时,对数值位的操作是:

(1) 数值位取反,得到011 0111;

(2) 对取反后的数值 011 0111加1得到011 1000,数值位的值为56;

那么,1100 1000这个二进制数据表示为“有符号数”时,就是-56这个数值。

如果作为无符号数看待,那么,就没有符号位,所有的位数都是数值位,所以11001000都作为数值位,表示的十进制数值是180。

例如,0111 0011这个数值,如果当做“有符号数”看待,那么,其符号位是0,所以,表示正数,数值位是115,所以,表示正115这个数值。如果当做无符号数看待,所有位都是数值位,计算得到115这个数值,所以,表示正115。所以我们可以总结:

(1) 无符号数,总是表示正数。所有位数都表示数值位。

(2) 有符号数,可以表示正数和负数,最高位是符号位,其余位都是数值位。如果符号位是0,则表示正数;如果符号位是1,则表示负数。对于负数的表示方法是:数值位全部取反,再加1,得到的数值就是负数值。

相关文章

  • 失误集锦

    2020.10.16 问题描述: 使用了一个无符号数,这个无符号数是两个数相减得到的。而已有代码相减时没有考虑无符...

  • 1.4数据宽度

    计算机对数据的处理是有大小限制的。 本节必须掌握的知识点: 1、数据宽度 2、理解有符号数、无符号数 3、进制的符...

  • Cpp:位操作符

    位操作符:位操作符操作的整数可以是有符号或无符号数。 下面的例子,假设unsigned char有8位: ~: 类...

  • 2_有符号和无符号

    关键词:计算机中的符号位、有符号数的表示法、无符号数的表示法、signed和unsigned、无符号数和有符号数的...

  • 有符号数和无符号数

    在计算机中,若一个数代表有符号数,则一个n位数的最高位代表正数或负数,其余位取反加1。比如1000_0000,则除...

  • 有符号数和无符号数

    1.无符号数是相对于有符号数而言的,指的是整个机器字长的全部二进制位均表示数值位,相当于数的绝对值,表示非负数。 ...

  • 有符号数和无符号数

    在计算机中,若一个数代表有符号数,则一个n位数的最高位代表正数或负数,其余位取反加1,比如1000_0000,则除...

  • 有符号数与无符号数

    最直观的区别:有符号数的第一位表示正负,无符号数的所有位都用来表示数字大小(且全部是正数)。 计算机中的数字都是用...

  • Class类文件结构

    按照Java虚拟机规范的规定,Class文件结构只有两种数据类型:无符号数和表 无符号数无符号数属于基本的数据类型...

  • 4.一般类型隐式类型转换

    浮点数赋值给整数只取整。 不要把有符号数赋值给无符号数,因为有符号数为负值时会发生意外。

网友评论

    本文标题:有符号数和无符号数

    本文链接:https://www.haomeiwen.com/subject/wgealdtx.html