惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
Tenable Blog
Last Week in AI
Last Week in AI
P
Proofpoint News Feed
Engineering at Meta
Engineering at Meta
H
Help Net Security
F
Fortinet All Blogs
MyScale Blog
MyScale Blog
宝玉的分享
宝玉的分享
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
博客园 - 司徒正美
量子位
N
Netflix TechBlog - Medium
Apple Machine Learning Research
Apple Machine Learning Research
小众软件
小众软件
Recorded Future
Recorded Future
博客园 - 三生石上(FineUI控件)
Vercel News
Vercel News
aimingoo的专栏
aimingoo的专栏
I
InfoQ
Microsoft Security Blog
Microsoft Security Blog
Scott Helme
Scott Helme
The Last Watchdog
The Last Watchdog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
IT之家
IT之家
AI
AI
WordPress大学
WordPress大学
Security Archives - TechRepublic
Security Archives - TechRepublic
Google Online Security Blog
Google Online Security Blog
U
Unit 42
V2EX - 技术
V2EX - 技术
MongoDB | Blog
MongoDB | Blog
Schneier on Security
Schneier on Security
博客园 - Franky
H
Heimdal Security Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Jina AI
Jina AI
W
WeLiveSecurity
P
Privacy & Cybersecurity Law Blog
Cloudbric
Cloudbric
B
Blog RSS Feed
N
News | PayPal Newsroom
S
Securelist
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
I
Intezer
Hacker News - Newest:
Hacker News - Newest: "LLM"
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
博客园_首页
罗磊的独立博客
H
Hackread – Cybersecurity News, Data Breaches, AI and More
雷峰网
雷峰网

Sunshine

SpringBoot定时任务@Scheduled注解详解 | Sunshine 大端模式、小端模式解析 | Sunshine Spring事件驱动模型实践 | Sunshine IDEA好用的几款插件 | Sunshine Linux使用yum安装MySQL详细步骤(CentOS7.3) | Sunshine Windows下MySQL解压版安装配置详细步骤 | Sunshine Java使用JDBC连接SQLServer数据库(二) | Sunshine Java使用JDBC连接SQLServer数据库(一) | Sunshine Git基本操作整理 | Sunshine Oracle序列创建和使用 | Sunshine Git批量清理本地分支 | Sunshine Statement.RETURN_GENERATED_KEYS获取自增id踩坑记录 | Sunshine GitPages+Hexo搭建个人博客 | Sunshine
机器数、原码、反码、补码解析 | Sunshine
DongyangHu · 2021-02-24 · via Sunshine

机器数、原码、反码、补码

计算机使用补码进行数字的存储和运算,本文假定机器的字长为8位,探讨下机器数、原码、反码、补码之间的关系

机器数和真值

机器数

  • 计算机中一个数的二进制表示形式,称为这个数的机器数
  • 机器数带符号,在计算机中,用一个数的最高位存放符号,称为符号位,0表示正数,1表示负数

    例:1的机器数为00000001-1的机器数为10000001。此处的0000000110000001即为机器数

真值

  • 带符号位的机器数表示的真实数值称为机器数的真值
  • 因为机器数的最高位为符号位,因此机器数表示的形式值并不一定等于真正的数值(10000001转换为十进制为129,并不代表机器数的真正数值,真值为-1)

    例:00000011的真值为310000011的真值为-3

原码、反码、补码

原码、反码、补码为机器数表示的三种形式,正数的原码、反码、补码都是其本身

原码

  • 原码就是机器数真值的绝对值加上符号位。也就是最高位为符号位,其余位表示数值

    [+1] = 0000 0001

    [-1] = 1000 0001

  • 第一位为符号位,其表示范围

    [1111 1111, 0111 1111]

十进制值为

[-127, 127]

反码

  • 在原码的基础上,正数的反码是其原码本身,负数的原码为符号位不变,其余位取反

    [+1] = [0000 0001] = [0000 0001]

    [-1] = [1000 0001] = [1111 1110]

补码

  • 在原码的基础上,正数的补码也是其原码本身,负数的补码为符号位不变,其余位取反后+1,及反码+1

    [+1] = [0000 0001] = [0000 0001] = [0000 0001]

    [-1] = [1000 0001] = [1111 1110] = [1111 1111]

补码计算

  • 1 - 1 = 0

    1 - 1 = 1 + (-1) = [0000 0001] + [1000 0001] = [0000 0001] + [1111 1111] = [0000 0000] = [0000 0000] = 0

  • (-127) + (-1) = (-128)

    (-127) + (-1) = [1111 1111] + [1000 0001] = [1000 0001] + [1111 1111] = [1000 0000] = -0

在用补码运算的结果中,规定 [1000 0000]就是-128,实际上是使用以前的-0的补码来表示-128,所以-128并没有原码和反码表示

  • 因此补码表示范围

[1000 0000, 0111 1111]

十进制值为

[-128, 127]

例如:Java中基本数据类型int为4个字节,32位,可表示的范围:[-231, -231 - 1]

版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Sunshine