【C/C++】C/C++编程——整型(二)

在 C++ 中,整型数据可以分为有符号数(Signed)和无符号数(Unsigned),这两种类型主要用于表示整数值,但它们在表示范围和用途方面有所不同。默认情况下,整数类型如 int、short、long 都是有符号数,通过在这些类型前加上 unsigned 关键字可以定义无符号数(例如:unsigned long)。字符型 char 可以是有符号的或无符号的,具体取决于编译器的默认设置。

有符号数 (Signed)

有符号整数可以表示正数、负数以及零。C++ 中的有符号整型包括:

  • shortsigned short
  • intsigned int
  • longsigned long
  • long longsigned long long

有符号整型的表示范围是对称的,以 0 为中心,向正负两方向延伸。例如,如果一个有符号整型用 8 位(1 字节)表示,则其范围是从-128 到 127。这是因为其中一个位用于表示符号(通常是最高位),剩余的位表示大小。这一部分上一节中已经详细介绍了,有兴趣的朋友可以去看看。

无符号数 (Unsigned)

无符号整数仅用于表示非负数(包括零)。C++ 中的无符号整型包括:

  • unsigned short
  • unsigned int
  • unsigned long
  • unsigned long long

无符号整型的表示范围从 0 开始,向正方向延伸。继续上面的例子,如果一个无符号整型用 8 位表示,则其范围是从 0 到 255。所有的位都用于表示大小,没有位被用于表示符号。

表示范围

无符号数的表示范围是有符号数的两倍,但它不能表示负数。

名称大小(字节)取值范围说明
unsigned char10 到 255通常用于存储小的非负整数或字符。
unsigned short20 到 65,535适用于存储中等大小的非负整数。
unsigned int40 到 4,294,967,295常用于存储大的非负整数。一般来说,这是最常用的无符号整数类型。
unsigned long4 或 80 到 4,294,967,295 或更大用于存储大的非负整数,其具体大小依赖于编译器和平台。
unsigned long long80 到 18,446,744,073,709,551,615用于存储非常大的非负整数。

有符号数与无符号数的区别

区别

有符号数是最高位为符号位,0 代表正数,1 代表负数。

#include <iostream> // 引入输入输出流库
using namespace std; // 使用标准命名空间,避免每次调用标准库函数时都要加std::int main() // 主函数入口
{signed int a = -1089474374; // 定义一个有符号整型变量a,并赋值为-1089474374cout << std::hex << a << endl; // 将cout的输出格式设置为十六进制,并输出变量a的值,然后输出一个换行符si// b    f    0    f    f    0    b    a// 1011 1111 0000 1111 1111 0000 1011 1010return 0; // 返回0,正常结束程序
}

在这里插入图片描述

这段代码的作用是定义一个有符号整数 a,并将其初始化为 -1089474374。然后,使用 cout 以十六进制的形式输出这个整数的值,最后以换行符结束输出。

  • signed int a = -1089474374;:这里定义了一个 signed int(有符号整型)变量 a,并给它赋了一个负值 -1089474374

  • cout << std::hex << a << endl;

    • std::hex:这是一个 I/O 操作符,用来告诉 cout 后续的整数输出应该以十六进制的形式表示。
    • a:输出变量 a 的值,由于之前指定了十六进制格式,所以 a 的值将以十六进制形式显示。
    • endl:这是一个操作符,用来在输出流中插入一个换行符,并刷新输出缓冲区,使得输出立即出现在目标设备上(如屏幕)。
  • b f 0 f f 0 b aa 的十六进制表示,对应的二进制形式是 1011 1111 0000 1111 1111 0000 1011 1010。十六进制的每一位对应二进制的四位,从左到右依次是:b(1011)、f(1111)、0(0000)、f(1111)、f(1111)、0(0000)、b(1011)、a(1010)。可以看到它的最高位为 1,表示它为负数。

无符号数最高位不是符号位,而就是数的一部分,无符号数不可能是负数。

十进制数 3236958022 的二进制表示方式为:1011 1111 0000 1111 1111 0000 1011 1010

如果将其当作无符号数来看待,那么它的原码为: 1100 0000 1111 0000 0000 1111 0100 0110,

十六进制表示为:c 0 f 0 0 f 4 6

#include <iostream> // 引入标准输入输出流库,用于输入输出操作
using namespace std; // 使用标准命名空间std,避免每次调用标准库函数时都要加std::int main() // 主函数入口,程序从这里开始执行
{unsigned int a = 3236958022; // 定义一个无符号整型变量a,并赋值为3236958022cout << std::hex << a << endl; // 将cout的输出格式设置为十六进制,并输出变量a的值,然后输出一个换行符return 0; // 主函数返回0,表示程序正常结束
}

在这里插入图片描述

  • unsigned int a = 3236958022;:这里定义了一个 unsigned int(无符号整型)变量 a,并将其初始化为 3236958022

  • cout << std::hex << a << endl;:跟上个例子一样,这一行代码使用 cout 来输出变量 a 的值,但在输出之前,使用 std::hex 来指定输出格式为十六进制。endl 是用来在输出的末尾添加一个换行符,并且刷新输出缓冲区,确保输出立即显示。

    • std::hex:这个操作符改变了 cout 的状态,使得随后的整型输出以十六进制形式展示。
    • a:输出变量 a 的值。由于 cout 已经被设置为十六进制输出模式,所以 a 的值会以十六进制形式显示。
    • endl:在输出流中插入一个换行符,并刷新输出缓冲区,使得输出立即显示在目标设备上(例如屏幕)。

从输出结果可以看出,与在开头部分分析的一样,输出的十六进制为 c0f00f46,这表示无符号数最高位不是符号位,而就是数的一部分。

有符号数和无符号数的使用建议

  1. 当明确知道数值不会是负数时,建议使用无符号数。
  2. 当需要表示的数可能为负值,应使用有符号整数。
  3. 如果预期算术运算可能产生负数结果,使用有符号整数可以避免无符号数溢出的问题。
  4. 无符号数可以表示比相同大小的有符号数更大的正数值。

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

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

相关文章

中科大计网学习记录笔记(三):接入网和物理媒体

前言&#xff1a; 学习视频&#xff1a;中科大郑烇、杨坚全套《计算机网络&#xff08;自顶向下方法 第7版&#xff0c;James F.Kurose&#xff0c;Keith W.Ross&#xff09;》课程 该视频是B站非常著名的计网学习视频&#xff0c;但相信很多朋友和我一样在听完前面的部分发现信…

基于tidevice实现iOS app自动化使用详解

目录 1、IOS自动化工具概述 2、tidevice工具的原理和使用 2.1、tidevice的原理 2.2、tidevice实现的功能 2.3、tidevice的安装 2.4、tidevice的使用 2.4.1、设备管理 1、查看已连接的设备的列表 2、检测设备连接状态 3、等待设备连接&#xff0c;只要有就连接就结束监…

2024-01-06-AI 大模型全栈工程师 - 如何训练百亿参数大模型

摘要 2024-01-06 周六 杭州 晴 本节内容: 讲座模式&#xff0c;学习大模型训练的相关流程。 课程内容 1. Transformer 回顾 2. 模型架构-生成式 3. 预训练数据的构建 4. 中文字典的构建 4. 预训练目标的构建 5. 预训练相关-预训练策略 6. 预训练相关-并行化训练 7. 预训练…

搭建高效企业培训平台:教育系统源码开发详解

为了更好地满足企业培训的需求&#xff0c;许多组织纷纷转向数字化教育&#xff0c;搭建高效的企业培训平台成为当务之急。本篇文章&#xff0c;小编将为您讲解教育系统源码的开发细节&#xff0c;为搭建一个功能强大、灵活高效的企业培训平台提供详尽的指南。 一、教育系统的…

Django响应(一)

一、HttpResponse与JsonResponse 1.1、HttpResponse 官网:https://docs.djangoproject.com/zh-hans/4.1/ref/request-response/#django.http.HttpResponse 返回给浏览器端的响应对象 from django.http import HttpResponse response = HttpResponse("Heres the text o…

程序的内存模型

师从黑马程序员 内存分区模型 内存大方向划分为4个区域 1、代码区&#xff1a;存放函数体的二进制代码&#xff0c;由操作系统管理的 2、全局区&#xff1a;存放全局变量环和静态变量以及常量 3、栈区&#xff1a;由编译器自动分配释放&#xff0c;存放函数的参数值&#…

H12-811_503

503.如下图所示&#xff0c;下列说法正确是&#xff1f;( ) A.主机A和主机B的广播地址相同 B.主机A可以ping通主机B C.主机A和主机B不能获取对方的MAC地址 D.主机A的ARP缓存中存在如下条目10.0.12.5 MAC-B 答案&#xff1a;C 注释&#xff1a; 两个主机IP地址的网…

四大组件 - ContentProvider

参考&#xff1a;Android 这 13 道 ContentProvider 面试题&#xff0c;你都会了吗&#xff1f; 参考&#xff1a;《Android 开发艺术探索》 第 9.5 节&#xff08;ContentProvider 的工作过程&#xff09; 参考&#xff1a;内容提供者程序 参考&#xff1a;<provider>&g…

Nucleosome, Recombinant Human, H2BK120ub1 dNuc, Biotinylated

EpiCypher&#xff08;国内授权代理商欣博盛生物&#xff09;是一家为表观遗传学和染色质生物学研究提供高质量试剂和工具的专业制造商。EpiCypher生产的在E. coli中表达的重组人单核小体(组蛋白H2A、H2B、H3和H4各2个;accession numbers:H2A-P04908;H2B-O60814;H3.1-P68431;H4…

SpringMVC处理ajax请求之@ResponseBody注解,将后端数据响应到浏览器

上一篇文章讲到SpringMVC处理ajax请求用到的RequestBody注解SpringMVC处理ajax请求&#xff08;RequestBody注解&#xff09;&#xff0c;ajax向后端传递的数据格式详解-CSDN博客&#xff0c;这个注解帮我们解决了如何将客户端的数据通过json数据传递到服务器&#xff0c;简单说…

数据探索与可视化:可视化分析数据关系-中

目录 一、前言 二、介绍 Ⅰ.一个分类变量和一个连续变量 Ⅱ.两个分类变量的一个连续变量 Ⅲ.两个分类变量和两个连续变量 Ⅳ.一个分类变量和多个连续变量 ①.平行坐标轴 ②.矩阵散点图 三、结语 一、前言 在做数据分析的时候&#xff0c;很少会遇到连续变量和分类变量…

PyTorch如何支持 GPU 加速计算

在 PyTorch 中&#xff0c;torch.Tensor 是核心的数据结构&#xff0c;它与 NumPy 的 ndarray 类似&#xff0c;用于存储和操作多维数据。但与 NumPy 不同的是&#xff0c;PyTorch 的 Tensor 除了能在 CPU 上运行之外&#xff0c;还能够无缝地利用 GPU 进行计算加速。 GPU 加速…

读千脑智能笔记01_新皮质

作者简介 1988年至1992年&#xff0c;创造了平板电脑GridPad&#xff0c;它属于第一批平板电脑 1992年&#xff0c;成立了Palm公司&#xff0c;之后在长达10年的时间内&#xff0c;设计了一些最早的掌上电脑和智能手机&#xff0c;如PalmPilot和Treo 在2002年创立了红木神经科学…

《HTML 简易速速上手小册》第9章:HTML5 新特性(2024 最新版)

文章目录 9.1 HTML5 新增标签和属性9.1.1 基础知识9.1.2 案例 1&#xff1a;创建一个结构化的博客页面9.1.3 案例 2&#xff1a;使用新的表单元素创建事件注册表单9.1.4 案例 3&#xff1a;创建一个具有高级搜索功能的搜索表单 9.2 HTML5 表单增强9.2.1 基础知识9.2.2 案例 1&a…

VScode注释快捷键,RStudio注释快捷键, Texmaker注释快捷键

VScode&#xff1a;一款界面简单的代码编辑器&#xff1b;RStudio: R语言的IDE&#xff0c;包含代码编辑器&#xff0c;运行&#xff0c;绘图窗口等&#xff1b;Texmaker&#xff1a;Latex编译器&#xff08;编辑编译&#xff09;&#xff0c;界面简单&#xff0c;个人认为比Te…

揭秘远程控制APP的便捷之美!

在这个科技日新月异的时代&#xff0c;我们的生活被各种手机软件所包围。几乎每个人都有一个甚至多个手机&#xff0c;你是否也有遇到过需要远程操作自己某一台手机的场景呢&#xff1f;今天&#xff0c;我要向大家推荐一款神奇的手机远程操作神器&#xff0c;让你可以随时随地…

Kore.ai获10亿元融资,提供定制化类ChatGPT助手

1月31日&#xff0c;生成式AI和企业对话平台Kore.ai在官网宣布&#xff0c;获得1.5 亿美元&#xff08;约10.7亿元&#xff09;融资。本次由FTV Capital 领投&#xff0c;英伟达等跟投。 Kore.ai主要提供银行、医疗、零售、营销、人力资源等多种领域的&#xff0c;定制化类Cha…

【动态规划】【C++算法】1340. 跳跃游戏 V

作者推荐 【动态规划】【字符串】【表达式】2019. 解出数学表达式的学生分数 本文涉及知识点 动态规划汇总 LeetCode1340跳跃游戏 V 给你一个整数数组 arr 和一个整数 d 。每一步你可以从下标 i 跳到&#xff1a; i x &#xff0c;其中 i x < arr.length 且 0 < x…

zsh: command not found: mysql (mac通过安装MySQL后终端cmd找不到mysql命令)

考虑是mysql环境变量没有配置的问题 1.查找mysql安装路径 ps -ef|grep mysql 2.先启动上安装的mysql 3. 查看 .bash_profile 文件 ls -al 查看是否有(.bash_profile)文件 如果没有就输入以下命令创建一个&#xff0c;再查看 touch .bash_profile 4.打开 .bash_profile 文件 …

kubekey网页版安装k8s集群操作流程

kubekey可以一键拉起k8s集群并完成kubesphere的部署&#xff0c;以后kubekey简称kk。kk 3.2版本以前都是在宿主机上完成对应的创建集群、添加节点、升级等操作的&#xff0c;3.2版本后开始往页面操作的方向演进&#xff0c;kk 3.2版本现在还是alpha&#xff0c;所以不推荐在生产…