【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,并赋值为-1089474374
    cout << std::hex << a << endl; // 将cout的输出格式设置为十六进制,并输出变量a的值,然后输出一个换行符
    
    si
    // b    f    0    f    f    0    b    a
    // 1011 1111 0000 1111 1111 0000 1011 1010

    return 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,并赋值为3236958022
    cout << 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. 无符号数可以表示比相同大小的有符号数更大的正数值。

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

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

相关文章

爱上JUC: 面试常考题大总结(线程安全篇)

&#x1f31f;一起备战面试吧&#x1f604;&#xff0c;也是巩固&#x1f4aa;&#xff0c;不再害怕面试&#x1f44a; 文章目录 进程和线程区别并行和并发的区别创建线程的方式有哪些runnable和callable有什么区别run和start区别线程包含哪些状态&#xff0c;是如何转换的&…

【TCP/IP】用户访问一个购物网站时TCP/IP五层参考模型中每一层的功能

当用户访问一个购物网站时&#xff0c;网络上的每一层都会涉及不同的协议&#xff0c;具体网络模型如下图所示。 以下是每个网络层及其相关的协议示例&#xff1a; 物理层&#xff1a;负责将比特流传输到物理媒介上&#xff0c;例如电缆或无线信号。所以在物理层&#xff0c;可…

DockerUI如何部署结合内网穿透实现公网环境管理本地docker容器

文章目录 前言1. 安装部署DockerUI2. 安装cpolar内网穿透3. 配置DockerUI公网访问地址4. 公网远程访问DockerUI5. 固定DockerUI公网地址 前言 DockerUI是一个docker容器镜像的可视化图形化管理工具。DockerUI可以用来轻松构建、管理和维护docker环境。它是完全开源且免费的。基…

基于协同算法的图书信息管理系统(编号V73)

Java精品项目源码基于协同算法的图书信息管理系统(编号V73) 大家好&#xff0c;小辰今天给大家介绍一个图书信息管理系统&#xff0c;演示视频公众号&#xff08;小辰哥的Java&#xff09;对号查询观看即可 文章目录 Java精品项目源码基于协同算法的图书信息管理系统(编号V73…

Pandas.Series.cumsum() 累积和 详解 含代码 含测试数据集 随Pandas版本持续更新

关于Pandas版本&#xff1a; 本文基于 pandas2.2.0 编写。 关于本文内容更新&#xff1a; 随着pandas的stable版本更迭&#xff0c;本文持续更新&#xff0c;不断完善补充。 传送门&#xff1a; Pandas API参考目录 传送门&#xff1a; Pandas 版本更新及新特性 传送门&…

医学答案怎么查找?3个受欢迎的搜题分享了 #其他#职场发展#职场发展

学习工具是我们的得力助手&#xff0c;帮助我们更好地组织学习内容和时间。 1.南北题库 这是一个网站 完全免费,主要的特点就是题库全面丰富,涵盖计算机、外语、论文撰写、注册会计师等。并且后续还会继续扩展题库,题目分类非常详细,体界面清晰简洁。 有举一反三功能,搜一道…

使用PHPStudy搭建本地web网站并实现任意浏览器公网访问

文章目录 [toc]使用工具1. 本地搭建web网站1.1 下载phpstudy后解压并安装1.2 打开默认站点&#xff0c;测试1.3 下载静态演示站点1.4 打开站点根目录1.5 复制演示站点到站网根目录1.6 在浏览器中&#xff0c;查看演示效果。 2. 将本地web网站发布到公网2.1 安装cpolar内网穿透2…

正点原子--STM32定时器学习笔记(1)

这部分是笔者对基本定时器的理论知识进行学习与总结&#xff01;&#xff0c;主要记录自己在学习过程中遇到的重难点&#xff0c;其他一些基础点就一笔带过了&#xff01; 1. 定时器概述 1.1 软件定时原理 使用纯软件&#xff08;CPU死等&#xff09;的方式实现定时&#xf…

【SpringBoot】SpringBoot的web开发

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;SpringBoot ⛺️稳重求进&#xff0c;晒太阳 Wbe开发 使用Springboot 1&#xff09;、创建SpringBoot应用&#xff0c;选中我们需要的模块&#xff1b; 2&#xff09;、SpringBoot已经默…

机器视觉系统设计:视觉系统中的成像基准

开发视觉系统的一个重要活动是验证其部署是否符合工程规范。一个成功的视觉应用程序的两个特点是它无需工程师干涉情况下正常工作了多长时间&#xff0c;以及它的维护和复制部署是多么简易。实现所有如上所述目标的一个关键步骤是确定视觉系统的基准。 在这里使用的上下文中&a…

Unknown column ‘project_name‘ in field list。表示数据库中没找到你要查得或者插入的‘project_name’字段。

Unknown column project_name in field list。表示数据库中没找到你要查得或者插入的‘project_name’字段。

ftrace工具学习笔记

ftrace是一个功能强大的Linux内核跟踪工具&#xff0c;可用于分析内核的行为和性能问题。它可以用来收集各种内核跟踪数据&#xff0c;如函数调用、内存分配、中断处理等。以下是ftrace的一些主要特点和用法&#xff1a; ftrace是内核自带的跟踪工具&#xff0c;因此无需安装。…

服务器和云服务器哪个更安全?

随着云计算技术的不断发展&#xff0c;越来越多的企业开始选择使用云服务器来存储和处理数据。然而&#xff0c;对于一些企业来说&#xff0c;他们可能更倾向于使用传统的服务器。在这种情况下&#xff0c;安全性成为了一个重要的考虑因素。那么&#xff0c;服务器和云服务器哪…

代码随想录算法训练营第22天 | 235. 二叉搜索树的最近公共祖先 , 701.二叉搜索树中的插入操作 , 450.删除二叉搜索树中的节点

二叉树理论基础&#xff1a; https://programmercarl.com/%E4%BA%8C%E5%8F%89%E6%A0%91%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.html#%E7%AE%97%E6%B3%95%E5%85%AC%E5%BC%80%E8%AF%BE 235. 二叉搜索树的最近公共祖先 题目链接&#xff1a;https://leetcode.cn/problems/lowes…

vue3-内置组件-Transition

基于状态变化的过渡和动画&#xff08;常用&#xff09; 建议多看几遍~~。然后动手去写写&#xff0c;学编程只有多动手才能有感觉。 内置组件: 它在任意别的组件中都可以被使用&#xff0c;无需注册。 Vue 提供了两个内置组件&#xff0c;可以帮助你制作基于状态变化的过渡和动…

AMH面板如何安装与公网远程访问本地面板界面

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

Mac版Idea实用快捷键+使用技巧

快捷键 全局查找 shift command f 查找类(class) command o 查找classfilesymbolaction 点击两次shift 复制当前行 command d 自动代码提示 option enter 代码格式化 option command l 生成代码(构造函数、Getter/Setter方法、equals方法、hashCode方法、…

VLM 系列——Llava1.6——论文解读

一、概述 1、是什么 Llava1.6 是llava1.5 的升级暂时还没有论文等&#xff0c;是一个多模态视觉-文本大语言模型&#xff0c;可以完成&#xff1a;图像描述、视觉问答、根据图片写代码&#xff08;HTML、JS、CSS&#xff09;&#xff0c;潜在可以完成单个目标的视觉定位、名画…

这一年让我印象深刻的bug --外部接口请求失败问题

1 业务场景 我们有个需求是外部客户需要在我们系统创建一个账号。业务流程如下 但是我们运行一段时间后发现一个问题&#xff0c;有客户反创建客户账号时&#xff0c;提示账号已经存在&#xff0c;但是我们系统却查不到单号 2 问题分析 经分析报错来源于权限系统&#xff0c;我…

学习Spring的第十五天

spring aop动态代理开发 一、什么是动态代理 动态代理就是&#xff0c;在程序运行期&#xff0c;创建目标对象的代理对象&#xff0c;并对目标对象中的方法进行功能性增强的一种技术。在生成代理对象的过程中&#xff0c;目标对象不变&#xff0c;代理对象中的方法是目标对象…