有符号数和无符号数

2023-11-07

1、数值

        针对二进制来讲,有 有符号数(signed)和无符号数(unsigned)。

        因为计算机无法区分一个二进制数是有符号数还是无符号数,因此我们在定义时要明确该数值是有符号数还是无符号数。

        无符号类型需要通过unsigned关键字指定,否则默认为有符号类型。

2、有符号数

2.1 有符号数的定义

        是用最高位(即从左往右数的第1位),表示符号(0为正数,1为负数),其余位表示数值大小有符号数区分正数和负数。如图2.1中,第一行的最高位为0,因此它的十进制数读作22;第二行的最高位为1,因此它的十进制数读作-22。

 图2.1

2.2 有符号数的转换

将下列二进制数转化为十进制:

        eg1:

                已知二进制数:1 1 1 1 1 1 1 1

                第一步:先列出表格如下

1

1

1

1

1

1

1

1

-2^7

2^6

2^5

2^4

2^3

2^2

2^1

2^0

      第二步:将表格第二行数相加        1 1 1 1 1 1 1 1 :-2^7+2^6+2^5+2^4+2^3+2^2+2^1+2^0=-1

        eg2:

                已知二进制数:0 1 0 1 1 0 1 1

                第一步:先列出表格如下

0

1

0

1

1

0

1

1

0

2^6

0

2^4

2^3

0

2^1

2^0

                第二步:将表格第二行数相加        0 1 0 1 1 0 1 1 :0+2^6+0+2^4+2^3+0+2^1+2^0=91

2.3 有符号数的表示方法

2.3.1 原码表示法

        正数

                将其十进制数转化为二进制数;

                例如:十进制数11用二进制数表示为0 0 0 0 1 0 1 1

        负数

                将其十进制数转化为二进制数,最高位为符号位, 取1;

                例如:十进制数-11用二进制数表示为1 0 0 0 1 0 1 1

2.3.2 反码表示法

        正数

                原码 = 反码

                例如:原码为0 0 0 0 1 0 1 1,则其反码为0 0 0 0 1 0 1 1

        负数

                反码 = 原码除最高位(符号位)外,每位取反;

        例如:原码为1 1 1 0 1 0 1,则其反码为1 0 0 1 0 1 0

2.3.3 补码表示法

        正数

                原码 = 补码;

                例如:原码为0 0 0 0 1 0 1 1,则其补码为0 0 0 0 1 0 1 1

        负数

                补码 = 反码+1;

                例如:原码为1 1 1 0 1 0 1,则其反码为1 0 0 1 0 1 0, 其补码为1 0 0 1 0 1 1

2.3.4 移码表示法

        正数

                移码 = 补码最高位取反;

                例如:原码为0 0 0 0 1 0 1 1,则其补码为0 0 0 0 1 0 1 1,则其移码为1 0 0 0 1 0 1 1

        负数

                移码 = 补码最高位取反;

                例如:原码为1 1 1 0 1 0 1,则其反码为1 0 0 1 0 1 0, 其补码为1 0 0 1 0 1 1,其移码为0 0 0 1 0 1 1

2.4 有符号数的取值范围

        有w位二进制数,当最高位为1,其余位为0时,有符号数取得最小值:-2^(w-1);当最高位为0,其余位为1时,有符号数取得最小值:2^(w-1)-1。

        因此有符号数的取值范围是[-2^(w-1) , 2^(w-1)-1 ]

3、无符号数

3.1无符号数的定义

        无符号数的所有位都用于表示数的大小,只能用于表示非负数

3.2无符号数的转换

        eg1:

                已知二进制数:1 1 1 1 1 1 1 1

                第一步:先列出表格如下

1

1

1

1

1

1

1

1

2^7

2^6

2^5

2^4

2^3

2^2

2^1

2^0

               第二步:将表格第二行数相加        11111111:2^7+2^6+2^5+2^4+2^3+2^2+2^1+2^0=28-1=127

        eg2:

                已知二进制数:0 1 0 1 1 0 1 1

                第一步:先列出表格如下

0

1

0

1

1

0

1

1

0

2^6

0

2^4

2^3

0

2^1

2^0

                第二步:将表格第二行数相加        0 1 0 1 1 0 1 1 :0+2^6+0+2^4+2^3+0+2^1+2^0=91

3.3 有符号数的表示方法

3.3.1 原码表示法

        正数

                将其十进制数转化为二进制数;

                例如:十进制数11用二进制数表示为0 0 0 0 1 0 1 1

3.3.2 反码表示法

        正数

                原码 = 反码

                例如:原码为0 0 0 0 1 0 1 1,则其反码为0 0 0 0 1 0 1 1

3.3.3 补码表示法

        正数

                原码 = 补码;

                例如:原码为0 0 0 0 1 0 1 1,则其补码为0 0 0 0 1 0 1 1

3.3.4 移码表示法

        正数

                移码 = 补码最高位取反;

                例如:原码为0 0 0 0 1 0 1 1,则其补码为0 0 0 0 1 0 1 1,则其移码为1 0 0 0 1 0 1 1

3.4无符号数的取值范围

        无符号数的所有位都用于表示数的大小。因此无符号数的取值范围是[0 , 2w-1]

如果有错,请大家帮忙指出555~

感激不尽!!!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有符号数和无符号数 的相关文章

  • 请求的资源不支持 HTTP 方法“GET”

    我的路线配置正确 并且我的方法具有装饰标签 我仍然收到 请求的资源不支持 HTTP 方法 GET 消息 System Web Mvc AcceptVerbs GET POST System Web Mvc HttpGet public st
  • 到底什么是“位填充”或“填充位”?

    我只是在互联网上找不到任何关于 位填充 真正含义的详细解释 并且在 Stack Overflow 上也没有找到与位填充相关的线程的任何答案 我还搜索了 ISO 9899 1990 其中提到了 位填充 但没有根据我的需要进行解释 我在网上找到
  • 在静态断言和运行时错误之间自动选择

    我有一个执行除法并检查对齐的宏 define BYTES TO WORDS x CHECK ALIGNMENT x 2 x 2 我想实施CHECK ALIGNMENT作为一个总是返回 1 的宏 并且如果满足以下条件则触发错误x不除以 2 宏
  • Rx Framework:在超时时执行操作,而不中断原始可观察序列

    给定一个可观察的源 通过轮询低级设备的 变化 状态生成 observable source metacode IObservable
  • 实体框架 5 不清除导航属性

    我在 Entity Framework 5 中遇到了这个奇怪的问题 我在其中一个实体中有一个导航属性 我想将其设置为null 但由于某种原因 该属性只有在我第二次调用该属性时才会被清除 using var db new Entities v
  • 使用 std::string 导致 Windows“找不到入口点”[重复]

    这个问题在这里已经有答案了 当我用 G C C 编译它时 include
  • 我需要一个树转储选项,该选项在当前的 gcc 版本中不再存在

    旧版本的 GCC 例如 4 0 2 或 4 1 2 有该选项 df see 用于调试程序或 GCC 的选项对于4 1 2 http gcc gnu org onlinedocs gcc 4 1 2 gcc Debugging Options
  • 如何解决素数函数的大O表示法?

    我正在尝试理解 Big O 表示法 很抱歉 如果我问的问题太明显了 但我似乎无法理解这一点 我有以下 C 代码函数 我正在尝试为其计算 Big O 表示法 for i 2 i lt 100 i for j 2 j lt i j j if i
  • C#中如何将委托转换为对象?

    我正在使用反射类来调用其他 dll 上的一些方法 方法的参数之一是委托类型 我想通过使用反射来调用这个方法 所以我需要将函数参数作为对象数组传递 但我找不到任何关于 如何将委托转换为对象 提前致谢 委托是一个对象 只需像平常一样创建预期的委
  • XPath 选择具有特定属性值的元素?

    我在使用 XPath 选择节点时遇到问题 我将展示一个示例 由于实际数据量很大 xml 文件被缩短了 这是 XML 的子集
  • C++ 静态工厂构造函数

    我正在进行模拟 它需要创建多个相当相似的模型 我的想法是有一个名为 Model 的类并使用静态工厂方法来构造模型 例如 模型 createTriangle or 模型 createFromFile 我从以前的 java 代码中汲取了这个想法
  • 当“多次安装 MSBuild”时,Dotnet 项目转换尝试转换失败

    try convert w Test csproj target framework netstandard2 0 结果是 Multiple installs of MSBuild detected please select one In
  • Cuda:最小二乘求解,速度较差

    最近 我使用Cuda编写了一个名为 正交匹配追踪 的算法 在我丑陋的 Cuda 代码中 整个迭代需要 60 秒 而 Eigen lib 只需 3 秒 在我的代码中 矩阵 A 是 640 1024 y 是 640 1 在每一步中 我从 A 中
  • 正则表达式基于组的不同替换?

    所以我对正则表达式比较陌生 并且做了一些练习 我正在玩一个简单的 混淆器 它只是寻找 dot or dot or at or at 不区分大小写 并且在匹配项之前或之后有或没有任意数量的空格 这是针对通常情况的 someemail AT d
  • 为 C++ 类播种 rand()

    我正在开发一个 C 类 它使用rand 在构造函数中 我真的希望这个班级在几乎所有方面都能照顾好自己 但我不知道在哪里播种rand 如果我播种rand 在构造函数中 每次构造我的对象类型的新实例时都会对其进行播种 因此 如果我按顺序创建 3
  • C中的pipe()和fork()

    我需要创建两个子进程 一个子进程需要运行命令 ls al 并将其输出重定向到下一个子进程的输入 而下一个子进程又将对其输入数据运行命令 sort r n k 5 最后 父进程需要读取该数据 已排序的数据 并将其显示在终端中 终端中的最终结果
  • Python 中的 C 指针算术

    我正在尝试将一个简单的 C 程序转换为 Python 但由于我对 C 和 Python 都一无所知 这对我来说很困难 我被 C 指针困住了 有一个函数采用 unsigned long int 指针并将其值添加到 while 循环中的某些变量
  • 可选参数代码在 .NET 3.5 中编译。为什么?

    这段代码在 VS 2010 的框架 3 5 项目中编译正常 我三次检查过 public LoggingClient string uri net msmq localhost logging 为什么 我在 C 4 规范中没有看到任何内容 文
  • Android NDK - 仅用 C/C++ 编写

    有没有一种可能的方法可以使用 C C 编写整个 NDK 应用程序 而无需像 hello jni 示例项目 HelloJni java 中那样的 Java 入门 类 以某种方式创建一个 HelloJni c 来执行相同的操作 从 Androi
  • 构建 OpenCV 时出错 :: MonitorFromRect 未在此范围内声明

    我试图建立OpenCV version 2 4 8与它一起使用CodeBlocks and MinGw 我按照以下指示进行操作here http kevinhughes ca tutorials opencv install on wind

随机推荐

  • 基于HTTP协议的API接口测试

    一 接口组成 请求 返回 接口请求 请求的URL 请求头 User Agent Content Type 请求方法 GET POST PUT DELEte 请求参数 拼接在URL 后面 请求的body中 二 接口测试关注点 三 postma
  • 2006年100首好歌

    快三秒音乐网收集的2006年网络点击最TOP100首流行歌曲 地址 http www k111 com musiclist k111 13703 htm1 千里之外 周杰伦 http www k111 com musiclist 10 72
  • 手刃一个小爬虫

    from urllib request import urlopen url https www baidu com resp urlopen url with open mybaidu html mode w as f f write r
  • ***.forEach is not a function

    forEach is not a function 缘起 在这里插入图片描述 原生js获取的DOM集合是一个类数组对象 不能直接利用数组的方法 例如 forEach map等 需要进行转换为数组后 才能用数组的方法 1 推荐几种转换成数组的
  • leetcode刷题笔记:两数之和

    题目链接 牺牲空间换时间 使用一个数组记录下遍历的数和target之间的差值 每遍历一个数查找差值列表是否存在该数 class Solution public int twoSum int nums int target int i int
  • Arduino数字滤波设计方法(Python测试滤波示例)和异常值过滤算法

    数字滤波设计 数字信号处理的目的是在数字系统上执行 而不是在模拟电路上进行操作 通过这种方式 它基于软件执行相同的任务 而不需要电子材料或更换 这种方法确保设计简单且可升级 比如用RC元件制作的模拟滤波器 就需要改变材料来改变滤波器的截止频
  • Docker使用阿里云镜像加速器

    登录阿里云控制台 搜索容器镜像服务 界面上没有可以在搜索框中搜索 进入容器镜像服务管理控制台 如果需要开通就按照提示开通一下 如下图所示 在容器镜像服务控制台最底下有个镜像加速器 点进去之后有一个加速器地址 使用这个地址作为docker镜像
  • FreeRTOS ------- 任务(task)

    在学习RTOS的时候 个人觉得带着问题去学习 会了解到更多 1 什么是任务 在FreeRTOS中 每个执行线程都被称为 任务 每个任务都是在自己权限范围内的一个小程序 其具有程序入口每个任务都是在自己权限范围内的一个小程序 其具有程序入口通
  • 中断模式中中断和事件的区别_C中中断和继续之间的区别

    中断模式中中断和事件的区别 In this tutorial you will learn about difference between break and continue in C 在本教程中 您将了解C语言中break和conti
  • 前端websocket连接开发时devserver代理配置及nginx代理配置

    页面代码 socketUrl ws location host websocket ws uid 1 location host即前端服务部署地址 var socket new WebSocket socketUrl 打开事件 socket
  • HTML5+CSS3定位+导航二维码显示隐藏切换案例

  • Qt 样式表介绍

    概述 Qt Widget界面美化除了自己绘制外 有一个更简单高效的方式 就是Qt样式表 Qt样式表是一种强大的机制 通过QApplication setStyleSheet 设置整个应用程序的样式 通过QWidget setStyleShe
  • 分享几个图床网址,便于大家分享图片

    1 ImgURL 图床ImgURL ImgURL免费图床https https www imgurl org 又是一个比较老牌的免费图床服务 稳定性不错 无需注册 游客限制每日上传10张 单张图片不能超过 5M 支持 HTTPS 诞生于20
  • 数组的方法-sort()

    数组的sort 方法主要用于对数组的元素进行排序 其中 sort 方法有一个可选参数 但是 此参数必须是函数 数组在调用sort 方法时 如果没有传参将按字母顺序 字符编码顺序 对数组中的元素进行排序 如果想按照其他标准进行排序 就需要进行
  • Vue路由+NodeJs环境搭建

    Vue路由 NodeJs环境搭建 一 Vue路由 第一步 引入js文件 第二步 创建两个组件展示相关的功能 第三步 形成组件与请求路径的对应关系 第四步 将路由关系和路由对象绑定 第五步 将路由关系和vue实例绑定 第六步 发起请求 第七步
  • 1、docker 镜像操作

    1 创建 拉取镜像 docker hub https hub docker com 搜索对应的镜像 搜索 nvidia cuda 在tags里最终选择 10 2 cudnn7 devel ubuntu18 04版本 最终完整的镜像名 nvi
  • 域名,端口,IP总结

    前言 真正的房子只有几个门 但是一个IP地址的端口可以有65536 即 2 16 个之多 端口是通过端口号来标记的 端口号只有整数 范围是从0 到65535 2 16 1 我们知道 一台拥有IP地址的主机可以提供许多服务 比如Web服务 F
  • 智能交通技术(ITSTech)公号推广简介

    2023年9月14日更新 一 智能交通技术 微信公众号 简介 关注智能交通 车路协同 交通规划 交通改善 智慧城市等领域新理论和技术发展 交流大数据 云边端计算 人工智能 区块链等技术的应用经验 推广智能交通技术在交通规划 交通运输监管 交
  • hj212协议如何和php通讯,HJ212数据传输标准报文解析

    HJ212分为2005年 HJ T212 2005 和2017年 HJ212 2017 的版本 略有不同 网上没找到非常官方的渠道下载 在这贴一份2017年版本的下载地址 TCP IP通讯包组成 名称 类型 长度 描述 包头 字符 2 固定
  • 有符号数和无符号数

    1 数值 针对二进制来讲 有 有符号数 signed 和无符号数 unsigned 因为计算机无法区分一个二进制数是有符号数还是无符号数 因此我们在定义时要明确该数值是有符号数还是无符号数 无符号类型需要通过unsigned关键字指定 否则