整数在计算机眼中是什么样子的呢?

整数类型

在现实世界中,整数是无穷的。但在计算机中,由于内存资源的有限性,我们只能表示有限范围的整数。

1. 整数类型的分类

在编程语言(如Java)中,整数类型主要分为以下几种:

  1. byte: 1个字节,范围[-128, 127]
  2. short: 2个字节,范围[-32768, 32767]
  3. int: 4个字节,范围[-2^31, 2^31-1]
  4. long: 8个字节,范围[-2^63, 2^63-1]
    每种类型都有对应的无符号版本(unsigned),无符号类型只能表示非负数,但相同字节数下可以表示更大的正数范围。

2. 进制表示

我们日常使用十进制(逢十进一),而计算机使用二进制(逢二进一)。例如:

  • 十进制数 13 = 1×10^1 + 3×10^0

  • 二进制数 1101 = 1×2^3 + 1×2^2 + 0×2^1 + 1×2^0 = 13(十进制)
    进制转换的基本方法:

  • 十进制转二进制:除2取余,逆序排列
    例:13 ÷ 2 = 6 余 1
    6 ÷ 2 = 3 余 0
    3 ÷ 2 = 1 余 1
    1 ÷ 2 = 0 余 1
    所以 13 的二进制是 1101

  • 二进制转十进制:按权展开
    例:1101 = 1×2^3 + 1×2^2 + 0×2^1 + 1×2^0 = 8 + 4 + 0 + 1 = 13

3. 原码与补码

原码

原码是最直观的二进制表示,用最高位表示符号(0正1负),其余位表示数值。
例如:+5 的原码是 00000101
-5 的原码是 10000101

但原码存在一个问题:用原码无法统一加减法运算。比如:
5 - 3 = 5 + (-3),这个等式在原码下无法成立。

补码

补码的设计巧妙地解决了这个问题。对于负数,补码的计算方法是:

  1. 取绝对值的二进制
  2. 所有位取反
  3. 最后加1

例如,-5的补码计算过程:

  1. 5的二进制:00000101
  2. 取反:11111010
  3. 加1:11111011

使用补码的好处:

  1. 统一了加减法运算电路
  2. 0只有一种表示方式
  3. 符合数学运算规律

4. 整数溢出

当运算结果超出数据类型的表示范围时,就会发生溢出。例如:

byte a = 127;
a++; // 结果为 -128

这是因为 127 的二进制补码是 01111111,加1后变成 10000000,解释为补码就是 -128。

总结

  1. 计算机整数的有限性源于内存限制
  2. 补码的设计既满足了数学运算规律,又简化了硬件实现
  3. 在编程时要注意整数溢出问题
  4. 选择合适的整数类型可以平衡内存占用和数值范围

这个例子也说明了计算机科学中一个重要的思想:问题可以在硬件层面(如使用补码)或软件层面(如溢出检测)解决,关键是找到最优方案。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Pandas】pandas Series apply

Pandas2.2 Series Function application, GroupBy & window 方法描述Series.apply()用于将一个函数应用到 Series 的每个元素或整个 Series pandas.Series.apply pandas.Series.apply 是 Pandas 库中 Series 对象的一个方法,用于将一个函数应用到 Series 的…

SDL2:arm64下编译使用 -- SDL2多媒体库使用音频实例

SDL2:Android-arm64端编译使用 2. SDL2:Android-arm64端编译使用2.1 安装和配置NDK2.2 下载编译SDL22.3 SDL2使用示例:Audio2.4 Android设备运行 2. SDL2:Android-arm64端编译使用 在Linux系统上使用Android NDK编译和使用arm64下…

Ubuntu服务器折腾集

目录 Ubuntu 更改软件源Ubuntu 系统语言英文改中文windows 远程链接 Ubuntu 图形界面Windows 通过 openssh 连接 UbuntuUbuntu linux 文件权限Ubuntu 空闲硬盘挂载到 文件管理器的 other locationsUbuntu 开启 SMB 服务,并通过 windows 访问DockerseafileNextcloud…

可解释性机器学习

一、引言 随着机器学习(ML)在各个领域的广泛应用,模型的复杂度不断增加,如深度神经网络等黑盒模型逐渐成为主流。这些模型虽然具有很高的预测性能,但其内部的决策机制往往难以理解,导致模型的透明度和可解释…

PyTorch使用教程(8)-一文了解torchvision

一、什么是torchvision torchvision提供了丰富的功能,主要包括数据集、模型、转换工具和实用方法四大模块。数据集模块内置了多种广泛使用的图像和视频数据集,如ImageNet、CIFAR-10、MNIST等,方便开发者进行训练和评估。模型模块封装了大量经…

网络安全防护指南:筑牢网络安全防线(510)

一、网络安全的基本概念 (一)网络的定义 网络是指由计算机或者其他信息终端及相关设备组成的按照一定的规则和程序对信息收集、存储、传输、交换、处理的系统。在当今数字化时代,网络已经成为人们生活和工作中不可或缺的一部分。它连接了世…

关于vite+vue3+ts项目中env.d.ts 文件详解

env.d.ts 文件是 Vite 项目中用于定义全局类型声明的 TypeScript 文件。它帮助开发者向 TypeScript提供全局的类型提示,特别是在使用一些特定于 Vite 的功能时(如 import.meta.env)。以下是详细讲解及代码示例 文章目录 **1. env.d.ts 文件的…

CentOS 安装Redis

1. 安装 Redis 安装 EPEL 仓库(对于 CentOS/RHEL 系统): 首先安装 EPEL 仓库,因为 Redis 存在于 EPEL 仓库中: yum install epel-release安装 Redis 数据库: yum install redis2. 修改 Redis 配置文件 …

Spring Boot 基础入门指南

Spring Boot 基础入门指南 引言 在当今快速发展的软件行业中,开发者们一直在寻找简化应用程序开发的方法。Spring Boot 应运而生,它旨在帮助开发者快速构建基于Spring框架的应用程序,同时尽可能减少配置工作。本文将带您了解Spring Boot的基…

1.17学习

crypto nssctf-[SWPUCTF 2021 新生赛]crypto8 不太认识这是什么编码,搜索一下发现是一个UUENCODE编码,用在线工具UUENCODE解码计算器—LZL在线工具解码就好 misc buuctf-文件中的秘密 下载附件打开后发现是一个图片,应该是一个图片隐写&…

Python爬虫学习前传 —— Python从安装到学会一站式服务

早上好啊,大佬们。我们的python基础内容的这一篇终于写好了,啪唧啪唧啪唧…… 说实话,这一篇确实写了很久,一方面是在忙其他几个专栏的内容,再加上生活学业上的事儿,确实精力有限,另一方面&…

LabVIEW时域近场天线测试

随着通信技术的飞速发展,特别是在5G及未来通信技术中,天线性能的测试需求日益增加。对于短脉冲天线和宽带天线的时域特性测试,传统的频域测试方法已无法满足其需求。时域测试方法在这些应用中具有明显优势,可以提供更快速和精准的…

LabVIEW 程序中的 R6025 错误

R6025错误 通常是 运行时库 错误,特别是与 C 运行时库 相关。这种错误通常会在程序运行时出现,尤其是在使用 C 编译的程序或依赖 C 运行时库的程序时。 ​ 可能的原因: 内存访问冲突: R6025 错误通常是由于程序在运行时访问无效内…

【漏洞预警】FortiOS 和 FortiProxy 身份认证绕过漏洞(CVE-2024-55591)

文章目录 一、产品简介二、漏洞描述三、影响版本四、漏洞检测方法五、解决方案 一、产品简介 FortiOS是Fortinet公司核心的网络安全操作系统,广泛应用于FortiGate下一代防火墙,为用户提供防火墙、VPN、入侵防御、应用控制等多种安全功能。 FortiProxy则…

免费送源码:Java+ssm+MySQL 基于PHP在线考试系统的设计与实现 计算机毕业设计原创定制

摘 要 信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题。针对在线考试等问题,对如何通过计算…

Linux测试处理fps为30、1920*1080、一分钟的视频性能

前置条件 模拟fps为30、1920*1080、一分钟的视频 项目CMakeLists.txt cmake_minimum_required(VERSION 3.30) project(testOpenGl)set(CMAKE_CXX_STANDARD 11)add_executable(testOpenGl main.cpptestOpenCl.cpptestOpenCl.hTestCpp.cppTestCpp.hTestCppThread.cppTestCppTh…

Elasticsearch二次开发:实现实时定时同步同义词、近义词与停用词

Elasticsearch二次开发:实现实时定时同步同义词、近义词与停用词 引言 Elasticsearch(ES)作为开源搜索引擎的典范,以其强大的全文搜索、结构化搜索以及分析能力,在各个领域得到了广泛应用。在复杂的搜索场景中&#…

LeetCode_438.找到字符串中所有字母异位词

给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。 示例 1: 输入: s "cbaebabacd", p "abc" 输出: [0,6] 解释: 起始索引等于 0 的子串是 "cba", 它是 "a…

服务器迁移MySQL

由于公司原有的服务器不再使用,需要将老的服务器上的MySQL迁移到新的服务器上,因此需要对数据进行备份迁移,前提是两台服务器已安装相同版本的MySQL,这里就不再讲解MySQL的安装步骤了,可以安装包、可以在线下载、可以容…

前端【3】--CSS布局,CSS实现横向布局,盒子模型

盒子分类 1、块级盒子 2、内联级盒子 3、内联块级盒子 4、弹性盒子 5、盒子内部分区 方法一:使用 float 普通盒子实现横向布局 方法二:使用 display: inline-block 内联块级元素实现横向布局 方法三:使用弹性盒子 flexbox&#xff0…