数据的表示和存储 第3讲 C语言中的整数

深耕AI

​互联网行业 算法研发工程师

概括

本讲主要介绍了C语言中的整数表示。

无符号整数能够表示的最大值比带符号整数要大。带符号整数使用补码来表示,补码的运算系统是一种模运算系统,能够实现加减运算的统一。在C语言中,如果一个表达式中同时包含无符号整数和带符号整数,编译器会将带符号整数强制类型转换为无符号整数进行运算。

在C语言中,整数类型分为无符号整数带符号整数两类。

无符号整数是一个01序列。

可以按照最低有效位(LSB)最高有效位(MSB)来描述。

通常在计算机中,我们采用“最高有效位”在最左边,“最低有效位”在最右边的形式来表示无符号整数,与我们日常生活中的十进制表示形式一致。

例如,在一个8位的二进制数中:

  • 最高有效位(MSB)是第8位(从左到右,从1开始计数)。
  • 最低有效位(LSB)则是第1位。

这种排列方式使得我们可以直观地理解二进制数的权重分布。例如,二进制数 1001 可以解释为:

  • 第1位(LSB)权重为 20=120=1,值为 1
  • 第2位权重为 21=221=2,值为 0
  • 第3位权重为 22=422=4,值为 0
  • 第4位(MSB)权重为 23=823=8,值为 1

所以这个数的十进制值为 8×1+4×0+2×0+1×1=98×1+4×0+2×0+1×1=9。

这种表示法在计算机体系结构中非常重要,因为它影响了数据存储、传输以及加密解密算法的设计等各个方面。

定点数【定点整数+定点小数】的编码方式有3种:原码,补码,移码。

通常我们用补码表示带符号整数【50年代以来,计算机中的带符号数都用补码表示】。

浮点数中,有两个定点整数,一个是尾数部分,一个是整数部分。

尾数部分:用定点小数表示【原码表示】。

指数部分:用定点整数表示【移码表示】。

问:已知2147483647为2^31-1, C语言中的关系表达式"2147483647U>-2147483647-1"的结果是( )。

答:False。部分分析如下:

有符号二进制数 1000 0000 0000 0000 0000 0000 0000 0000

在有符号整数表示中,最高位是符号位。如果最高位为 1,则表示该数为负数;如果最高位为 0,则表示该数为正数。

对于 1000 0000 0000 0000 0000 0000 0000 0000,最高位为 1,这意味着它是一个负数。根据补码表示法,这个数表示的是 -2147483648

在有符号整数的情况下,32位二进制数 1000 0000 0000 0000 0000 0000 0000 0000 使用的是补码表示法。补码是用来表示有符号整数的一种方式,在这种方法中,最高位(第32位在此例中)是符号位,0 表示正数,1 表示负数。

在补码表示法中,负数的绝对值是通过将所有位取反(除了符号位之外),然后对结果加一得到的。但对于 1000 0000 0000 0000 0000 0000 0000 0000,取反后仍然是 1000 0000 0000 0000 0000 0000 0000 0000,因为除了最高位外的所有位都是 0,取反之后加一还是 1 跟一堆 0

因此,这个数表示的是 -2^{31},也就是 -2147483648

总结:在有符号32位整数中,二进制数 1000 0000 0000 0000 0000 0000 0000 0000 表示的十进制数是 -2147483648

这是因为 2^{31} 对应于二进制中的第32位,即 1000 0000 0000 0000 0000 0000 0000 0000,其值为 2147483648,而在有符号整数中,这个值表示为 -2147483648

无符号二进制数 1000 0000 0000 0000 0000 0000 0000 0000

在无符号整数表示中,所有位都用来表示数值的大小,没有专门的符号位。因此,这个数直接表示其二进制值对应的大小。

对于 1000 0000 0000 0000 0000 0000 0000 0000,其对应的十进制数为 2^{31},即 2147483648

总结

  • 有符号1000 0000 0000 0000 0000 0000 0000 0000 表示 -2147483648
  • 无符号1000 0000 0000 0000 0000 0000 0000 0000 表示 2147483648

int x=-1。请问:

在32位机器上,x为无符号数时,表示的十进制数是多少?x为有符号数时,表示的十进制数又是多少?

解答:

首先将-1转换为2进制数(补码)。为:

1111 1111 1111 1111 1111 1111(32个1)。具体原因是:

对于一个负数的补码表示,可以按照以下步骤进行:

找出该负数的绝对值:比如 -5 的绝对值是 5。
写出该绝对值的原码:假设我们使用 8 位表示,则 5 的二进制表示是 00000101。
对该绝对值的原码取反(按位取反):将 00000101 取反后得到 11111010。
对取反后的结果加 1:11111010 + 1 得到 11111011。
因此,-5 在 8 位二进制中的补码表示就是 11111011。
同理:-1的补码是:1111 1111.

如果这个数是无符号数,那么,它表示的十进制数,就等于:2的32次方-1。

如果这个数是有符号数,那么,由于首位是1,表示负数,其次,将其先减去1,然后各位取反,就得到:
0000 0000 0000 0000 0000 0001。所以,结果是-1。

对于比较两个数,首先要确定两个数的类型,到底时无符号数,还是带符号数。然后才能进行比较。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/882661.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

利用F.interpolate()函数进行插值操作

函数简介 功能: 利用插值方法,对输入的张量数组进行上\下采样操作,换句话说就是科学合理地改变数组的尺寸大小,尽量保持数据完整。 torch.nn.functional.interpolate(input, sizeNone, scale_factorNone, modenearest, align_c…

【赵渝强老师】K8s的DaemonSets控制器

DaemonSet控制器相当于在节点上启动了一个守护进程。通过使用DaemonSet可以确保一个Pod的副本运行在 Node节点上。如果有新的Node节点加入集群,DaemonSet也会自动给新加入的节点增加一个Pod的副本;反之,当有Node节点从集群中移除时&#xff0…

EdgeRoute_镜像烧录

1. EdgeRouter 概述 EdgeRouter Lite 是由 Ubiquiti Networks 公司生产的一款高性能网络路由器,适用于家庭和小型办公环境。它的尺寸为200 x 90 x 30 mm,重量为345克,配备了双核500 MHz的MIPS64处理器,并带有硬件加速功能&#x…

MySQL_数据类型简介

课 程 推 荐我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈虚 拟 环 境 搭 建 :&#x1…

Vue使用Vue Router路由:开发单页应用

1、路由基础 在单页 Web 应用中,整个项目只有一个 HTML 文件,不同视图(组件的模块)的内容都是在同一个页面中渲染的。当用户切换页面时,页面之前的跳转都是在浏览器端完成的,这时就需要使用前端路由。 路…

APP自动化中 ADB Monkey用法

一、monkey是干什么的? 我们可以使用monkey做手机端性能的压力测试,稳定性测试 二、monkey在使用的时候,他的运行特性 monkey默认配置下执行,会在手机中随机的点击或者轻触我们的手机中应用,不过这个时候&#xff0…

Cortex-M7核心寄存器

参考内容:Cortex-M7编程手册 文章目录 软件执行的处理器模式和权限级别处理器模式软件执行的权限级别 栈Stacks核心寄存器Core registers通用寄存器General-purpose registers链接寄存器Link register程序计数器 Program counter程序状态寄存器Program status regis…

PMP--二模--解题--91-100

文章目录 14.敏捷91、 [单选] 在敏捷团队完成三次迭代之后,项目经理确定团队在这三次迭代中的平均速度是30个故事点。还有292个故事点来完成项目的剩余部分。团队需要多少次额外的迭代才能完成项目? 9.资源管理92、 [单选] 项目经理前往另一个国家执行最…

python yield用法

1 yield关键字 yield在函数中的功能类似于return,不同的是yield每次返回结果之后函数并没有退出,而是 每次遇到yield关键字后返回相应结果,并保留函数当前的运行状态,等待下一次的调用。如果 一个函数需要多次循环执行一个动作&am…

【自动驾驶】控制算法(九)深度解析车辆纵向控制 | 从算法基础到 Carsim 仿真实践

写在前面: 🌟 欢迎光临 清流君 的博客小天地,这里是我分享技术与心得的温馨角落。📝 个人主页:清流君_CSDN博客,期待与您一同探索 移动机器人 领域的无限可能。 🔍 本文系 清流君 原创之作&…

『功能项目』QFrameWorkBug关联Slot(插槽)【67】

我们打开上一篇66QFrameWorkBug拖拽功能的项目, 本章要做的事情是关联插槽Slot 修改脚本:UISlot.cs 修改脚本:UGUICanvas.cs 此时关联Slot已经完成 接下来的文章内容: 1.QFrameWork扔到地上UGUI 2.位置存储功能 3.点击名称寻…

Python可迭代对象(2)

目录 3。字典 字典的构造 字典的添加和修改 字典推导式的使用 以上全部代码编译结果展示 字典复习 4。集合(set) 集合的创建 集合的运算 集合的添加和删除元素 以上全部代码的编译结果 序列解包(Sequence unpacking) 3。字典 字典的构造 #字…

【Linux】nginx连接前端项目

文章目录 一、项目编译1.编译文件2.dist文件 二、Linux nginx配置三、启动nginx 一、项目编译 1.编译文件 2.dist文件 二、Linux nginx配置 在Xshell软件中,点击CtrlAltF进入文件传输找到地址:/usr/local/nginx/html将dist文件传入 找到nginx.conf&…

R包:VennDiagram韦恩图

加载R包 library(VennDiagram)数据 # Prepare character vectors v1 <- c("DKK1", "NPC1", "NAPG", "ERG", "VHL", "BTD", "MALL", "HAUS1") v2 <- c("SMAD4", "DKK1…

【计算机网络 - 基础问题】每日 3 题(十九)

✍个人博客&#xff1a;Pandaconda-CSDN博客 &#x1f4e3;专栏地址&#xff1a;http://t.csdnimg.cn/fYaBd &#x1f4da;专栏简介&#xff1a;在这个专栏中&#xff0c;我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话&#xff0c;欢迎点赞&#x1f44d;收藏&…

【Python】curl命令、Api POST导入cURL、python直接使用cURL

文章目录 一、浏览器复制cURL二、API POST直接使用cURL创建接口三、python直接使用cURL构建网络请求四、curl命令详解语法选项实例 cURL是一种命令行工具&#xff0c;常用于通过各种协议&#xff08;如HTTP、HTTPS、FTP等&#xff09;传输数据。它的名字来源于"Client URL…

Python爬虫之requests模块(一)

Python爬虫之requests模块&#xff08;一&#xff09; 学完urllib之后对爬虫应该有一定的了解了&#xff0c;随后就来学习鼎鼎有名的requests模块吧。 一、requests简介。 1、什么是request模块&#xff1f; requests其实就是py原生的一个基于网络请求的模块&#xff0c;模拟…

「漏洞复现」灵当CRM marketing/index.php SQL注入漏洞

0x01 免责声明 请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;作者不为此承担任何责任。工具来自网络&#xff0c;安全性自测&#xff0c;如有侵权请联系删…

python爬虫初体验(一)

文章目录 1. 什么是爬虫&#xff1f;2. 为什么选择 Python&#xff1f;3. 爬虫小案例3.1 安装python3.2 安装依赖3.3 requests请求设置3.4 完整代码 4. 总结 1. 什么是爬虫&#xff1f; 爬虫&#xff08;Web Scraping&#xff09;是一种从网站自动提取数据的技术。简单来说&am…

c++调用python函数进行传参计算和返回

目录 前言&#xff1a;配置环境&#xff1a;基础夯实&#xff1a;1. 初始化Python解释器2. 导入Python模块3. 获取函数对象4. 调用Python函数5. 处理返回值6. 错误处理7. 资源管理8. 编译和链接9. 线程安全性10. 进一步学习 效果展示&#xff1a;实现功能&#xff1a;操作步骤&…