掘根宝典之c++有符号(signed)和无符号类型(unsigned)

在c++中,有符号和无符号是针对整型而言的

在C++中,除了布尔类型和拓展的字符类型之外,其他整型可以划分为有符号类型(signed)和无符号类型(unsigned),用于表示整数

有符号类型可以表示正数、负数和0,而无符号类型只能表示非负数(包括0)。

有符号类型

C++中的有符号整数类型包括:signed char、short、int、long和long long。

其中short,int,long,long long分别是signed short,signed int,signed long,signed long long的简写

这些类型可以表示负数和正数,其取值范围根据机器的字长而定。

无符号类型

C++中的无符号整数类型包括:unsigned char、unsigned short、unsigned int、unsigned long和unsigned long long。

其中unsigned int可以简写为unsigned。

这些类型只能表非负数,因此它们的取值范围比对应的有符号整数类型大。

给无符号类型赋一个负数

unsigned int a=1;

在大多数编程语言中,给无符号数赋值负数的规则是将负数视为一个很大的正数,并使用模运算将其转换为无符号类型的表示。

具体规则如下:

  1. 如果负数的绝对值小于无符号类型的最大值(在32位系统中是4294967295)加1,则将负数加上无符号类型的最大值加1,以得到负数对应的正数表示。

  2. 如果负数的绝对值大于或等于无符号类型的最大值加1,则负数的绝对值对无符号类型的范围取模(使用模运算),以得到负数对应的正数表示。

这样的转换可能导致溢出和不确定行为,因此在给无符号类型赋值负数时需要格外小心。

也就是说上面这个例子的结果是

unsigned int a=-1+4294967295+1;

我们可以再验证一下

 

给无符号整型赋负数值和整数溢出的原理是一样的

大家可以看看这个: http://t.csdnimg.cn/84XiM

对取模不熟悉的可以看看:http://t.csdnimg.cn/5uWur

char,signed char和unsigned char

和其他整型不同,字符型被分成了三种:char,signed char,unsigned char

需要注意的是char和signed char这里就不是简写关系了。

char会是signed char和unsigned char里的其中一种,而具体是哪种取决于编译器

混用有符号和无符号类型的后果

例子1

尽管我们不会给一个无符号对象赋一个负值,但是我们还是可能写出下面这样子的代码

unsigned int u=10;
int b=-42;
cout<<u+b<<endl;

你可能以为是-32,那你就大错特错了

在这个过程中,b和u相加前,把整数-42转化为无符号数(即-42+4294967295+1),再和10相加,也就是说会打印出-42+4294967295+1的结果

我们可以验证一下

例子2

无符号数不会小于0的事实还会影响到循环的写法

我们看个例子

	for (int i = 10; i >= 0; i--){cout << i << endl;}

结果

我们再看看无符号类型的

	for (unsigned int i = 10; i >= 0; i--){cout << i << endl;}

这时我们就会发现,这个陷入了死循环 

这是因为i是无符号类型,它永远是非负数

32位系统中,当u=0时,--u的结果是4294967235,又满足循环条件

解决方法是使用while循环

unsigned u=11;
while(u>0)
{
--u;
cout<<u<<endl;
}

 总结

如果表达式里面既有有符号类型和无符号类型,当有符号类型取值为负时会出现异常结果,这是因为有符号数会自动转化为无符号数(这和给无符号数赋负数的规则是一样的)

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

外卖点餐系统 |基于springboot框架+ Mysql+Java+JSP技术+Tomcat的外卖点餐系统 设计与实现(可运行源码+设计文档)

推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 目录 前台功能效果图 骑手功能模块 商家功能模块 管理员功能登录前台功能效果图 用户功能模块 系统功能设…

Linux网络编程: 以太网帧Frame/ARP/RARP详解

一、TCP/IP五层模型 物理层&#xff08;Physical Layer&#xff09;&#xff1a;物理层是最底层&#xff0c;负责传输比特流&#xff08;bitstream&#xff09;以及物理介质的传输方式。它定义了如何在物理媒介上传输原始的比特流&#xff0c;例如通过电缆、光纤或无线传输等。…

【AcWing】蓝桥杯集训每日一题Day5|归并排序|离散化|二分|逆序数对|505.火柴排队(C++)

火柴排队 505. 火柴排队 - AcWing题库难度&#xff1a;中等时/空限制&#xff1a;1s / 128MB总通过数&#xff1a;2058总尝试数&#xff1a;4484来源&#xff1a;NOIP2013提高组算法标签贪心离散化树状数组归并排序 题目内容 涵涵有两盒火柴&#xff0c;每盒装有 n 根火柴…

04-java基础--流程控制语句

一、switch语句 二、循环的三种结构 流程控制语句分为三种结构&#xff1a; 顺序结构&#xff08;按代码的书写顺序执行&#xff0c;从上到下依次执行&#xff09;分支结构&#xff08;if语句、if–else语句、switch语句&#xff09;循环结构&#xff08;while、for循环、do–…

Guitar Pro8许可证2024最新免费

作为一位吉他爱好者推荐官&#xff0c;我非常荣幸地向大家介绍一款备受赞誉的吉他工具——Guitar Pro8。这款软件是吉他爱好者们的必备之选&#xff0c;它以其卓越的功能和优势&#xff0c;全面覆盖学习演奏和绘谱创作的需求&#xff0c;帮助吉他爱好者们更好地提升自己的技能。…

数据预处理|数据清洗|使用Pandas进行异常值清洗

数据预处理|数据清洗|使用Pandas进行异常值清洗 使用Pandas进行异常值清洗1. 异常值检测1.1 简单统计分析1.2 散点图方法1.3 3σ原则1.4 箱线图 2. 异常值处理2.1 直接删除2.2 视为缺失值2.3 平均值修正2.4 盖帽法2.5 分箱平滑法2.6 回归插补2.7 多重插补2.8 不处理 使用Pandas…

creator-webview加载优化

title: creator-webview加载优化 categories: Cocos2dx tags: [cocos2dx, creator, webview, 优化, 加载, 性能] date: 2024-03-02 13:17:20 comments: false mathjax: true toc: true creator-webview加载优化 前篇 Android WebView shouldInterceptRequest - https://www.ji…

Java微服务 第二十一章 Java多线程安全与锁

🌹作者主页:青花锁 🌹简介:Java领域优质创作者🏆、Java微服务架构公号作者😄 🌹简历模板、学习资料、面试题库、技术互助 🌹文末获取联系方式 📝 往期热门专栏回顾 专栏描述Java项目实战介绍Java组件安装、使用;手写框架等Aws服务器实战Aws Linux服务器上操作…

大数据分析-基于python的电影票房预测系统设计与实现

一 概要 近些年来&#xff0c;随着电影行业变得越来越热门&#xff0c;也为影院带来不小的票房收入。传统的影院都是依靠个人经验进行排片&#xff0c;但是由于影片的票房收入可能受多种因素的影响&#xff0c;排片多的电影最后的票房会远低于预期值&#xff0c;导致影院因安排…

2024年新算法:基于苦鱼优化算法BFO的城市三维无人机路径规划(复杂地形三维航迹路径规划)

摘要&#xff1a;本文提出了一种利用苦鱼优化算法&#xff08;Bitterling fish optimization&#xff0c;BFO&#xff09;来解决城市环境下无人机三维路径规划问题的方法。这种方法将复杂的无人机航迹规划任务转化为一个优化问题&#xff0c;然后运用苦鱼优化算法BFO来解决这个…

前端学习笔记 | WebAPIs(DOM+BOM)

一、作用和分类 1、基本概念 作用&#xff1a;使用JS去操作HTML和浏览器 分类&#xff1a;DOM&#xff08;文档对象模型&#xff09;和BOM&#xff08;浏览器对象模型&#xff09; html的标签JS的DOM对象 2、获取DOM对象-参数必须加引号 &#xff08;1&#xff09;选择匹配的第…

IO控制继电器电路

一、U1光耦&#xff1a; 分离高低压&#xff0c;防止高压干扰&#xff0c;实现电气隔离。 二、D5 二极管 1N4148&#xff1a; 续流二极管&#xff0c;保护元件不被感应电压击du穿或烧坏&#xff0c;以并联的方式接到产生感应电动势的元件两端&#xff0c;并与其形成回路&…

LCR 110

LCR 110 问题 例子 思路 使用dfs便利所有边 代码 class Solution { public:vector<vector<int>> res;void deep(vector<vector<int>>& graph, int id, vector<int>& buf){if(idgraph.size()-1){res.push_back(buf);return;}for(int …

AST解web控制流平坦化

此代码可以解决大部分 while if else 控制流平坦化原理&#xff1a; 先将 if 语句转为 switch 语句&#xff0c;再将 switch 分支合并&#xff0c;最后删除已合并的分支&#xff08;具体看代码&#xff09; 实现效果图 首先安装依赖&#xff1a; npm install babel/parser npm…

uniapp——第2篇:编写vue语法

前提&#xff0c;建议先学会前端几大基础&#xff1a;HTML、CSS、JS、Ajax&#xff0c;还有一定要会Vue!&#xff08;Vue2\Vue3&#xff09;都要会&#xff01;&#xff01;&#xff01;不然不好懂 一、去哪写&#xff1f; 就在【pages】的你的人一个页面文件夹里的【.vue】文…

免费接口调用 招标信息自动抽取|招标信息|招标数据解析接口

一、开源项目介绍 一款多模态AI能力引擎&#xff0c;专注于提供自然语言处理&#xff08;NLP&#xff09;、情感分析、实体识别、图像识别与分类、OCR识别和语音识别等接口服务。该平台功能强大&#xff0c;支持本地化部署&#xff0c;并鼓励用户体验和开发者共同完善&#xf…

火车订票管理系统|基于springboot框架+ Mysql+Java+B/S结构的火车订票管理系统设计与实现(可运行源码+数据库+设计文档)

推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 目录 前台功能效果图 管理员功能登录前台功能效果图 用户功能模块 系统功能设计 数据库E-R图设计 lunwen…

bpmn-js中实现shape的内置属性、节点的默认配置

bpmn-js中使用elementfactory模块来构建一个元素的结构,其构建构成和元素属性的组成可参考:聊一聊bpmn-js中的elementFactory模块https://blog.csdn.net/chf1142152101/article/details/136294768。构建元素的属性会自动帮我们生成一个对应类型的shape的Id,其余属性均为空,…

洛谷P1182数列分段

题目描述 对于给定的一个长度为 N 的正整数数列 &#xff0c;现要将其分成 M&#xff08;M≤N&#xff09;段&#xff0c;并要求每段连续&#xff0c;且每段和的最大值最小。 关于最大值最小&#xff1a; 例如一数列 4 2 4 5 14 2 4 5 1 要分成 33 段。 将其如下分段&#…

Python类属性和对象属性大揭秘!

​ 在Python中&#xff0c;对象和类紧密相连&#xff0c;它们各自拥有一些属性&#xff0c;这些属性在我们的编程中起着至关重要的作用。那么&#xff0c;什么是类属性和对象属性呢&#xff1f;别急&#xff0c;让我慢慢给你解释。 类属性 首先&#xff0c;类属性是定义在类本…