当前位置: 首页 > news >正文

C# 整型、浮点型 数值范围原理分析

总目录


前言


一、整型、浮点型 数值范围列表

在这里插入图片描述
在这里插入图片描述

二、什么是大小、范围

在上面的列表中,每个数据类型都有自己的Range (范围) 和 Size (大小)。

1. 范围

范围好理解,就是对应数据类型的数据范围,如 sbtyte 的数据范围是 -128~127,超过该范围编译器会报错
在这里插入图片描述

2. 整型 大小

那么什么是大小呢? 大小和范围之间又有什么关系呢?

        static void Main(string[] args){var n1 = sizeof(sbyte); // 1var n2 = sizeof(byte);  // 1var n3 = sizeof(short); // 2var n4 = sizeof(int);   // 4var n5 = sizeof(uint);  // 4var n6 = sizeof(long);  // 8var n7 = sizeof(ulong); // 8Console.WriteLine($"sbyte:{n1}|byte:{n2}|short:{n3}|int:{n4}|uint:{n5}|long:{n6}|ulong:{n7}");//输出:sbyte:1|byte:1|short:2|int:4|uint:4|long:8|ulong:8}

sizeof 运算符返回给定类型的变量所占用的字节数,由此可知各个数据类型所占用的字节数。
其中1个字节 有8个数据位(1byte=8bit)。

要理解数据的数据范围是怎么来的,我们就需要了解计算机如何表示这些数据?
计算机使用二进制(0 和 1)来表示所有数据。对于一个8位(1个字节)的数据类型,它可以表示28=256 种不同的状态。

1)byte 类型

byte 是一个 无符号 的 8 位整数类型,其取值范围是 0 到 255。

  • byte 没有符号位,所以它可以使用全部 8 位来表示数值
  • 二进制表示:
    • 最小值:0000 0000 表示 10进制 0
    • 最大值:1111 1111 表示 10进制 255
  • 因此byte的 数据范围:从 0 ~ 255

2)sbyte 类型

sbyte 是一个 带符号 的 8 位整数类型,其取值范围是 -128 到 127。

  • sbyte使用最高位(最左边的一位)作为符号位:
    • 如果符号位为 0,则该数字是正数。
    • 如果符号位为 1,则该数字是负数。
  • 正数的表示,对于正数,sbyte 使用剩下的 7 位来表示数值:
    • 00000000 表示 0
    • 00000001 表示 1
    • 01111111 表示 127
    • 这 7 位可以表示 2^7 = 128 种不同的正数状态(包括 0),因此正数范围是从 0 到 127。
  • 负数的表示,对于负数,sbyte 使用补码表示法
  • 具体来说,负数的补码表示 是通过对其绝对值的二进制表示按位取反(即 0 变 1,1 变 0),然后加 1 得到的。例如:
    • -1 的补码表示:1111 1111(对 0000 0001 按位取反得 1111 1110,再加 1 得 1111 1111)
    • -2 的补码表示:1111 1110(对 0000 0010 按位取反得 1111 1101,再加 1 得 1111 1110)
    • -128 的补码表示:1000 0000(对 1000 0000 按位取反得 01111111,再加 1 得 10000000)
    • 特别地,-128 是因为 10000000 这个二进制数只能表示 -128,而没有对应的正数 128。

以此类推,我们就知道 short,int ,uint,long 等数据类型的数据范围是如何来的。

3. 浮点型分析

        static void Main(string[] args){var n1 = sizeof(float);   // 4var n2 = sizeof(double);  // 8var n3 = sizeof(decimal); // 16Console.WriteLine($"float:{n1}|double:{n2}|sizeof:{n3}");Console.WriteLine($"float 的范围{float.MinValue} - {float.MaxValue}");Console.WriteLine($"double 的范围{double.MinValue} - {double.MaxValue}");Console.WriteLine($"decimal 的范围{decimal.MinValue} - {decimal.MaxValue}");//输出:// float 的范围-3.4028235E+38 - 3.4028235E+38// double 的范围-1.7976931348623157E+308 - 1.7976931348623157E+308// decimal 的范围-79228162514264337593543950335 - 79228162514264337593543950335}

在这里插入图片描述

内部结构:

  • float 内部结构:遵循 IEEE 754 标准,使用 1 位符号位、8 位指数位和 23 位尾数位
    • 精度:大约6 - 9 位数字
  • double内部结构:遵循 IEEE 754 标准,使用 1 位符号位、11 位指数位和 52 位尾数位
    • 精度:大约15 - 17位数字
  • decimal内部结构:不是基于 IEEE 754 标准,而是专门为精确的小数运算设计,适用于金融和货币计算。
    • 精度:28-29位

适用场景:

  • float

    • 科学计算:如物理学模拟、图形处理等,对速度要求高,对精度要求相对较低的场合。
    • 游戏开发:如坐标计算、物理引擎等,需要快速运算但不需要极高精度的场景。
    • 一般用途:当需要表示小数且对精度要求不高时,float 是一个轻量级的选择。
  • double

    • 科学计算:如天文学、工程学等,对精度要求较高且涉及非常大或非常小数值的场合。
    • 金融计算:虽然 decimal 更适合金融应用,但在某些情况下,double 也可以用于非货币相关的高精度计算。
    • 高性能计算:如数值分析、机器学习等,需要高精度和较大范围的数据表示。
  • decimal

    • 金融和货币计算:如银行系统、会计软件等,要求绝对精确的小数运算,避免舍入误差。
    • 商业应用:如销售系统、库存管理等,涉及金额和价格的计算,确保结果准确无误。
    • 任何需要高精度小数运算的地方:如税收计算、利率计算等,确保不会因为浮点数的舍入问题导致错误。
  • 选择指南

    • 如果需要高速度和较小内存占用,并且可以接受一定的精度损失,选择 float。
    • 如果需要更高的精度和更大的数值范围,但仍然可以接受浮点数的舍入误差,选择 double。
    • 如果需要绝对精确的小数运算,特别是涉及货币和金融应用,选择 decimal。

结语

回到目录页:C# 知识汇总
希望以上内容可以帮助到大家,如文中有不对之处,还请批评指正。


参考资料:
sizeof 运算符 - 确定给定类型的内存需求

相关文章:

C# 整型、浮点型 数值范围原理分析

总目录 前言 一、整型、浮点型 数值范围列表 二、什么是大小、范围 在上面的列表中,每个数据类型都有自己的Range (范围) 和 Size (大小)。 1. 范围 范围好理解,就是对应数据类型的数据范围,如 sbtyte 的数据范围是 -128~127,超…...

Adobe Acrobat Pro DC 2023 下载安装教程,附详细图文

简介: Adobe Acrobat Pro DC 2023 是由 Adobe 公司推出的一款全面的 PDF 编辑、查看和管理软件。这款软件无论是个人用户还是企业级用户,都可以凭借其强大的功能满足不同的需求。作为一款业内领先的 PDF 处理工具,Adobe Acrobat Pro DC 不仅…...

stable diffusion秋叶启动器安装roop插件

方法简洁明了: 第一步:下载秋叶启动器 第二步:输入网址:https://visualstudio.microsoft.com/zh-hans/downloads/,下载vs安装程序,安装开始会自动弹出如下窗口,选择2个环境:Python开…...

7-14 统计工龄

给定公司多名员工的工龄,按输入工龄顺序输出每个工龄段有多少员工。 输入格式: 给出多个整数,即每个员工的工龄,范围在[0, 50]。 输出格式: 按输入工龄顺序输出每个工龄的员工个数,格式为:“工龄:人数”。 每项占一…...

OLED的显示

一、I2C I2C时序:时钟线SCL高电平下:SDA由高变低代表启动信号,开始发送数据;SCL高电平时,数据稳定,数据可以被读走,开始进行读操作,SCL低电平时,数据发生改变&#xff1…...

本地测试文件解析

PostMapping("/test") public void test() throws IOException {Path csvFile Paths.get("D:\\test/27.csv");//虚拟机退出时删除临时文件csvFile.toFile().deleteOnExit();List<String> list Files.readAllLines(csvFile, Charset.forName("…...

Elasticsearch JavaRestClient版

文章目录 初始化RestHighLeveClient&#xff08;必要条件&#xff09;索引库操作1.创建索引库&#xff08;4步&#xff09;2.删除索引库&#xff08;3步&#xff09;3.判断索引库是否存在&#xff08;3步&#xff09;4.总结&#xff1a;四步走 文档操作1.创建文档&#xff08;4…...

ubuntu 使用s3fs配置自动挂载对象存储

一、环境准备 1.有访问对象存储权限的AKSK 2.服务器、对象存储 二、实施步骤 sudo apt update sudo apt install s3fs echo "AK:SK" >/home/ubuntu/.passwd-s3fs ---位置自定义 chmod 600 /home/ubuntu/.passwd-s3fs ---权限必须要有 mkdir /data sudo s3fs …...

SQL字符串截取函数——Left()、Right()、Substring()用法详解

SQL字符串截取函数——Left&#xff08;&#xff09;、Right&#xff08;&#xff09;、Substring&#xff08;&#xff09;用法详解 1. LEFT() 函数&#xff1a;从字符串的左侧提取指定长度的子字符串。 LEFT(string, length)string&#xff1a;要操作的字符串。length&#x…...

关系分类(RC)模型和关系抽取(RE)模型的区别

目标不同 关系分类模型&#xff1a;对给定的实体对在给定句子中预测其关系类型。两阶段&#xff08;RC&#xff09; 关系抽取模型&#xff1a;从句子中识别出所有潜在实体对&#xff0c;并为其预测关系类型。一阶段&#xff08;NERRE&#xff09; 训练/预测阶段输入输出数据不…...

什么是索引

在数据库管理系统中&#xff0c;索引是一种数据结构&#xff0c;用于快速定位数据库表中的特定记录。索引类似于一本书的目录&#xff0c;可以帮助数据库引擎迅速找到所需的数据&#xff0c;而不必扫描整个表。 类型&#xff1a;常见的数据库索引类型包括B树索引、哈希索引、全…...

OJ随机链表的复制题目分析

题目内容&#xff1a; 138. 随机链表的复制 - 力扣&#xff08;LeetCode&#xff09; 分析&#xff1a; 这道题目&#xff0c;第一眼感觉非常乱&#xff0c;这是正常的&#xff0c;但是我们经过仔细分析示例明白后&#xff0c;其实也并不是那么难。现在让我们一起来分析分析…...

UE5材质节点Distance

Distance可以计算两个物体间的距离&#xff0c;可以用来做过渡效果 当相机和物体距离3000的时候&#xff0c;就会渐渐从蓝过渡到红色&#xff0c;除以500是为了平滑过渡...

OSPF - SPF算法简述

SPF全称最短路径树算法&#xff0c;相信学过数据结构朋友应该看起来很熟悉  在一个区域内的路由器都会产生描述自己网络连接信息的LSA&#xff0c;包括两种信息&#xff0c;有路由信息和拓扑信息&#xff0c;简单的来说拓扑信息就是我连着谁&#xff0c;路由信息就是链路的地址…...

7.UE5横板2D游戏,添加分类,创建攻击,死亡逻辑,黑板实现追击玩家行为

目录 1.将变量分类 2.创建攻击 3.应用伤害逻辑 4.死亡逻辑&#xff0c;停止AI行为 5.AI追击玩家&#xff0c;使用黑板实现 1.将变量分类 2.创建攻击 创建攻击输入为鼠标左键&#xff0c;并绑定映射。 攻击动画&#xff0c;在角色状态的枚举中添加一个新的枚举 攻击输入的…...

PostgreSQL对称between比较运算

本文介绍PostgreSQL对称between比较功能&#xff1a;between symmetric&#xff0c;在动态拼接SQL时利用它可以简化判断。PostgreSQL 9.4 及以上版本支持BETWEEN SYMMETRIC操作符&#xff0c;MySQL、Oracle、MsSQL没有对应功能。 between 比较 PostgreSQL的between结构允许你对…...

Spring AOP面向切面编程

Spring AOP面向切面编程 面向切面编程AOP作用AOP功能AOP总结 AOP核心概念AOP的实现方式Spring 对AOP支持支持Aspect声明一个切面声明一个切入点AspectJ描述符如下AspectJ类型匹配的通配符常用的匹配规则 声明增强 用AOP实现日志拦截一般的实现仅拦截需要的方法先定义一个日志注…...

Visual Studio 中增加的AI功能

前言&#xff1a; 人工智能的发展&#xff0c;在现在&#xff0c;编程技术的IDE里面也融合了AI的基本操做。本例&#xff0c;以微软的Visual Studio中的人工智能的功能介绍例子。 本例的环境&#xff1a; Visual Studio 17.12 1 AI 智能变量检测&#xff1a; 上图展示了一…...

15. 接雨水

接雨水 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 示例 1: 输入:height = [0,1,0,2,1,0,1,3,2,1,2,1] 输出:6 解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(…...

从索尼爱立信手机打印短信的简单方法

昨天&#xff0c;我买了一部新手机来代替我的旧索尼爱立信Xperia&#xff0c;但手机上有很多珍贵的短信&#xff0c;是我男朋友发来的&#xff0c;我不想失去它们。然后我尝试打印它们&#xff0c;但我无法从我的索尼爱立信手机中取出它们。您有什么从索尼爱立信手机打印短信的…...

AMLP:基于大语言模型的自动化机器学习势函数构建平台

1. 项目概述&#xff1a;当AI遇见原子模拟&#xff0c;AMLP如何重塑机器学习势函数构建在计算材料科学和化学物理领域&#xff0c;分子动力学模拟是我们窥探微观世界动态行为的“显微镜”。无论是研究新材料的相变过程&#xff0c;还是探索生物大分子的折叠机制&#xff0c;其核…...

告别沉浸式白屏!UniApp中iOS/Android底部安全区与顶部状态栏颜色自定义全攻略

告别沉浸式白屏&#xff01;UniApp中iOS/Android底部安全区与顶部状态栏颜色自定义全攻略当开发者尝试在UniApp中实现沉浸式设计时&#xff0c;往往会遇到一个令人头疼的问题——默认的白色安全区和状态栏导致界面元素&#xff08;如电池图标、信号强度&#xff09;几乎不可见。…...

用Python+OpenCV手把手实现Prewitt边缘检测(附完整代码与效果对比图)

用PythonOpenCV手把手实现Prewitt边缘检测&#xff08;附完整代码与效果对比图&#xff09; 边缘检测是计算机视觉中最基础也最关键的预处理步骤之一。想象一下&#xff0c;当你需要让计算机"看清"一张照片中的物体轮廓时&#xff0c;边缘检测算法就是它的"视觉…...

别再手动点菜单了!用这招让Cadence Virtuoso Schematic效率翻倍(附Net高亮快捷键配置)

电路设计效率革命&#xff1a;Cadence Virtuoso Schematic高阶快捷键配置指南 在集成电路设计的浩瀚宇宙中&#xff0c;Cadence Virtuoso如同设计师手中的光刻机&#xff0c;每一次精准操作都直接影响最终芯片的性能与可靠性。然而&#xff0c;当面对数百个晶体管组成的复杂模…...

智能手机相机光谱特性测量与多光谱成像技术

1. 智能手机相机光谱特性测量基础智能手机相机的光谱灵敏度函数(Spectral Sensitivity Function, SSF)和透射率函数是计算摄影领域的核心参数&#xff0c;它们决定了设备对光信号的响应特性。准确获取这些参数对色彩还原、光谱重建和白平衡校准等任务至关重要。1.1 光谱灵敏度函…...

政企数据安全:危机与出路

随着数字化转型的浪潮席卷全球&#xff0c;公共部门积累的数据量呈爆炸式增长。从公民个人信息到公共服务记录&#xff0c;从财政预算到基础设施管理数据——这些宝贵资源在提升政府治理效率的同时&#xff0c;也悄然成为网络犯罪分子的“新猎物”。当公共数据逐渐成为数字时代…...

大佬推荐的网络安全学习路线(从基础到高级,超级详细)

大佬推荐的网络安全学习路线&#xff08;从基础到高级&#xff0c;超级详细&#xff09; 说起网络安全&#xff0c;你可能会担心它是一个过时的行业。有人说&#xff0c;网络安全快卷死了&#xff0c;你既要攻又要防&#xff0c;并且随着技术的发展&#xff0c;你还要不断地学…...

真可用!美团数字人模型开源,MV、电商等统统拿下

美团开源的数字人视频生成框架 LongCat-Video-Avatar 刚刚更新到 1.5 版本。是真能用。这版更新把音频编码器换了&#xff0c;推理步数砍到8步&#xff0c;在770人、13240条主观评分的大规模评测里&#xff0c;雷达图面积全面领先。音频编码器换血&#xff0c;8步出图LongCat-V…...

Taotoken用量看板功能详解,助你洞察团队AI资源消耗模式

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 Taotoken用量看板功能详解&#xff0c;助你洞察团队AI资源消耗模式 对于技术管理者或项目负责人而言&#xff0c;清晰了解团队的AI…...

ArduPilot飞行模式实战:从代码角度看Stabilize、Acro、Loiter模式如何切换(附避坑指南)

ArduPilot飞行模式深度解析&#xff1a;从状态机到实战避坑指南 在开源飞控领域&#xff0c;ArduPilot以其强大的飞行模式系统著称。不同于普通用户只需了解模式功能&#xff0c;开发者更需要掌握模式切换的底层机制——这直接关系到飞行安全与二次开发效率。本文将带您深入Sta…...