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

size_t无符号数相关知识点

size_t无符号数相关知识点

在代码编译的时候,报错一个warning: comparison between signed and unsigned interger expression [-wsign-compare]

找到代码,告警这一段代码

size_t count = timeProtocol.m_intersectionArray.size();
for (unsigned int i = 0; i < count; i++) {//for循环操作
}

然后我还没有意识到真正的问题是什么,我还以为size_t是有符号类型,需要强转成无符号类型。还在群里发了信息,但是实际上我的理解是错的。

因为首先理解有误的就是size_t是无符号类型,然后我定义的变量i的类型是int型,群里说要将i改成无符号的。

我首先对自己的理解有误表示尴尬,但是还是认为这个修改实属过分的安全检查。但是再一想,这是很有必要的。

下面写个代码,验证可能出现的问题。

#include <iostream>
#include <string>int main()
{printf("\nstart first loop!\n");size_t count = 12;for(int i = 0; i < count; i++){printf("%d ",i);}printf("\nfinish first loop!\n");/** 上述代码是没有问题的。* unsigned int的范围是0——2^32 - 1;即 0 —— 4294967259* int的范围是-(2^31 - 1) —— 2^31 - 1;即 -2147483647——2147483647* 构造下面的错误*/printf("\nstart second loop!\n");size_t count2 = 2147483648 + 1;count2 = 2147483648;int test = 2147483647 + 2;printf("test:%d\n",test);printf("unsigned int test:%u\n",(unsigned int)test);if(test < count2)           //test有符号整型,2147483647+2 = -2147483647,但是实际整型提升为无符号为2147483649,大于2147483648{printf("test < count2\n");}else{printf("test > count2\n");}for(int i = 0; i < count2; i++){if(i > 2147483648 - 4){printf("%d ",i);}}printf("\nfinish second loop!\n");/** 上面是想构造一个错误的代码,但是构造失败了,原因是无符号和有符号对比是会整体提升* 并没有出现无限循环的情况* 那之前无线循环的是怎么构造的?下面按照自己的想法写一个*/printf("\nfinish third loop!\n");for(int i = 0; i < 2147483648; i++){if(i > 2147483648 - 4){printf("%d ",i);}}if(test < 214748368)    //test=2147483647 + 2, 小于214748368,但是上面的for循环没有无限循环,调试一下。是因为i < 2147483648这边值写错了。勾线了无限循环的例子{printf("\ntest < 214748368\n");}else{printf("test > count2\n");}printf("\nfinish third loop!\n");return 0;
}//这边还有一个问题,就是常量是什么类型的
//这边搜到一个帖子:https://blog.csdn.net/u012028275/article/details/120146226
//start first loop!
//0 1 2 3 4 5 6 7 8 9 10 11
//finish first loop!
//
//start second loop!
//test:-2147483647
//unsigned int test:2147483649
//test > count2
//2147483645 2147483646 2147483647
//finish second loop!
//
//finish third loop!
//2147483645 2147483646 2147483647 2147483645 2147483646 2147483647 2147483645 2147483646 2147483647 2147483645 2147483646
http://www.lryc.cn/news/351501.html

相关文章:

  • 深度学习之基于Tensorflow+Flask框架Web手写数字识别
  • 2024电工杯B题食谱评价与优化模型思路代码论文分析
  • blender安装cats-blender-plugin-0-19-0插件,导入pmx三维模型
  • [源码+搭建教程]西游伏妖篇手游_GM_单机+和朋友玩
  • windows、mac、linux中node版本的切换(nvm管理工具),解决项目兼容问题 node版本管理、国内npm源镜像切换
  • 【MySQL精通之路】全文搜索-布尔型全文搜索
  • 【学习笔记】C++每日一记[20240520]
  • 【热门话题】一文带你读懂公司是如何知道张三在脉脉上发了“一句话”的
  • linux命令日常使用思考
  • 同余定理与哈希函数
  • 03-01-Vue组件的定义和注册
  • 【python进阶】txt excel pickle opencv操作demo
  • Aware接口作用
  • Docker部署Minio S3第三方存储
  • 听说京东618裁员没?上午还在赶需求,下午就开会通知被裁了~
  • 力扣226. 翻转二叉树(DFS的两种思路)
  • 状态机-非重叠的序列检测
  • Word怎么画图?这5个方法收藏好!
  • qt designer 依赖库 QMessageBox
  • 反序列化漏洞(JBoss、apache log4、apache Shiro、JWT)Weblogic未授权访问、代码执行、任意上传
  • PHP身份证真伪验证、身份证二、三要素核验、身份证ocr接口
  • 【Qt 学习笔记】Qt常用控件 | 布局管理器 | 表单布局Form Layout
  • 数智赋能内涝治理,四信城市排水防涝解决方案保障城市安全运行
  • docker实战之搭建MYSQL8.0主从同步
  • LTD275次升级 | 网页编辑器新增AI翻译 • 文章|产品等内容可导出 • 新增交互数据 • 购物清单可导出• 官微中心app出新版
  • 代码随想录算法训练营第36期DAY36
  • zookeeper安装教程
  • windows2008修改远程桌面端口,如何果断修改远程桌面端口,确保系统安全无忧!
  • 【计算机网络原理】对传输层TCP协议的重点知识的总结
  • mysql实战——半同步复制搭建