• 无符号数和有符号数


    无符号数

    只有数值部分

    有符号数

    机器数与真值

    真值---带符号(+/-)的数

    机器数---符号数字化(0/1)的数

    把真值保存在计算机中考虑的三个部分 : 符号,数值,小数点

    1.小数点的位置是设计计算机时就约定好的:

    小数: 小数点位置在符号位之后---小数定点机

    整数: 小数点位置在数值之后---整数定点机

    原码表示法--带符号的绝对值表示

    计算机的原码,反码,补码--具体请参见此链接

    整数

    x = +1110

    [x]=0, 1110 用逗号将符号位和数值部分隔开

    x = -1110

    [x]=1, 1110

    小数

    x = +0.1101

    [x]=0. 1101 用小数点将符号位和数值部分隔开

    x = -0.1101

    [x]=1. 1101

    原码中有逗号的是整数, 有小数点的是小数, 但计算机是不需要存储逗号或小数点的,此处仅仅是为了人阅读方便

    注意!! 原码中符号位的0与真值中小数点前的0的意义是不一样的

    补码表示法

    计算机的原码,反码,补码--具体请参见此链接

    理念: 在加法运算中, 找到一个与负数等价的正数,来代替这个负数,使实际上的减法操作转换为加法操作(引入补码的原因需要理解,但计算公式直接硬记就好了)

    结论:

    1.一个负数加上"模"即得该负数的补数

    2.一个正数和一个负数互为补数时,他们的绝对值之和即为模数

    整数

    x = +1010

    [x]=0, 1010 用逗号将符号位和数值部分隔开

    x = -1011000

    [x]=1, 0101000 (数值位按位取反再加一,加一按二进制计算规则)

    小数

    !!: 机器数是有位数约定的,有时小数补码的值与真值并不相同(有可能会因为位数问题舍去)

    x = +0. 1110

    [x]=0. 1110 用小数点将符号位和数值部分隔开

    x = -0. 1100000

    [x]=1. 0100000


    当真值为"负"时---[x]->[x] :将补码按位取反再加一 (符号位不变)

    不管是整数还是小数[+0] = [-0]

    [-1] = 1. 0000, [-1]不能表示

    反码表示法

    其实我觉得没什么好说了,这比求补码还简单..

    除了符号位,数值位按位取反

    [+0]不等于[-0]

    三种机器数小结

    1.最高位为符号位

    2.对于正数, 原码=反码=补码

    3.对于负数,符号位为1, 其数值部分按位取反+1 = 补码;数值部分按位取反=反码

    例子

    已知[y] , 求[-y]

    [y]连同符号位在内, 每位取反, 末位+1, 即得 [-y]

    移码表示法

    引入原因: 补码表示很难直接判断其真值大小

    1.移码只用于表示整数

    2.一个真值的移码和补码仅仅相差一个符号位。无论正负。

    其他的表示方法都与别的机器码相同

    3.移码保持了数据原有的大小顺序,移码大真值就大,移码小,真值就小。

    4.最小的真值移码全为0

    5.[+0] = [-0]

  • 相关阅读:
    记录上锁(字节范围锁,特例:锁住文件的某一部分或者整个文件)
    读写锁的实现原理(pthread_rwlock_t)
    Linux 互斥锁的实现原理(pthread_mutex_t)
    System V消息队列
    Web安全之SQL注入攻击技巧与防范
    如何正确地写出单例模式
    java的concurrent用法详解
    java并发编程-Executor框架
    java.util.concurrent包分类结构图
    Java多线程干货系列(1):Java多线程基础
  • 原文地址:https://www.cnblogs.com/SophieWang-cmu/p/14076570.html
Copyright © 2020-2023  润新知