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

阿里云服务器发布网站百度快速排名系统查询

阿里云服务器发布网站,百度快速排名系统查询,关于做网站的问卷调查,wordpress只导出设置目录 补漏: 问题展现 解析 C的解决方案 补漏: 昨天我在开头提到-1的二进制如何表示,我在这里简单分析一下。 首先我们要明白有符号的数转换是需要补码的,所以我们想这个问题之前将补码的规则思考一遍(首先将有符号…

目录

补漏:

问题展现

解析

C++的解决方案


补漏:

昨天我在开头提到-1的二进制如何表示,我在这里简单分析一下。

首先我们要明白有符号的数转换是需要补码的,所以我们想这个问题之前将补码的规则思考一遍(首先将有符号的首位保留,后面几位取反后加一,然后算出数值后加上开头保留的符号就可以了)。现在我们求的是-1的二进制,那么就需要我们反着求解。我们要先想到1的二进制数(0000 0001)。首先我们要想到取反加一,然后符号位是1(代表负号),那么什么样的二进制数满足这样的需求呢?那毫无疑问就是1111 1111了(满足首位是1的条件,也满足其余位取反加1可以表达1的要求)。提升补充内容——补码原文在这。


现在开始我们今天的内容吧。

问题展现

还记得C语言是如何表示整数的吗?在补码那里就已经说过,整数在C++中的表示是特殊的,直接的二进制数是不能正确的表示的。因为整数的二进制首位是符号位,剩下的位数才是这个整数的大小表示;就拿32位做例子。1111 1111这其实就是二进制的-1表示,首位是符号位,其余的位数才是大小的表达。但是这就会牵涉到一问题,那就是超出了二进制的表达范围。

#include<iostream>
using namespace std;
int main()
{
//例1
int i=2147484444
for(;i>0;i++)
{
cout<<"add"<<i<<endl;
}
cout<<"end"<<i<<endl;//例2
int a=600;
int b=700;
int c=100;
int d=600;
cout<<a*b*c*d<<endl;return 0;
} 

上面的代码实例大家可以事先预测一下结果是多少,或者说判断一下结果是否是正数。

揭晓答案:这几个数都不是正数,都是负数。


这是为什么呢?

解析

这正是由于整数的溢出导致的,那么为什么会溢出呢?因为C语言中的内存分配是有限的,这就导致一旦我们输入的数大于数据类型,那么就会导致数据溢出。一旦溢出,就会从该数据类型所能表达的最大值返回到所能表达的最小值(负值)开始,相当于一个循环,从最大到最小。这也就说明在C语言中数学中的数字表达无法完全照搬的。

在C语言中,整数溢出是一个常见的问题,它发生在整数变量的值超出了其能够表示的范围时。C语言中的整数类型(如int、short、long等)都有固定的范围,这些范围由编译器和平台决定,但通常是基于标准的(如ISO C标准)。

整数类型范围示例
对于一个32位的int类型,其范围通常是-2,147,483,648到2,147,483,647(包括边界值)。
对于一个无符号的32位unsigned int,其范围则是0到4,294,967,295。
溢出示例

假设你有一个int变量x,其值为2,147,483,647(INT_MAX),如果你尝试执行x = x + 1;,由于x已经处于其能表示的最大值,因此无法存储更大的值。在这种情况下,x的值会“回绕”到其能表示的最小值(对于int来说,是-2,147,483,648),这就是所谓的整数溢出。

解决方案

  1. 使用更大的整数类型:如果可能,使用long long或unsigned long long等更大的整数类型来存储更大的值。
  2. 检查边界条件:在执行可能导致溢出的操作之前,检查变量的值是否接近其类型的最大值或最小值。
  3. 使用库函数:对于某些操作,如加法、乘法等,可以使用能够处理溢出的库函数(如GNU C Library中的__builtin_add_overflow等)。
  4. 使用软件方法:对于复杂的算法,可能需要设计特定的逻辑来避免或检测整数溢出。
  5. 使用硬件特性:在某些平台上,可以利用硬件特性(如溢出标志)来检测整数溢出。

注意事项
整数溢出是未定义行为(Undefined Behavior, UB),这意味着编译器可以以任何方式处理它,包括不产生任何错误消息。
在进行安全敏感或关键任务的应用程序中,必须特别注意整数溢出的问题。


C++的解决方案

很遗憾这个问题C语言是无法完全解决的。这里将一个库(boost),利用这个库来解决。这个库利用的是字符串(无限长)来表达无限长的数。

boost库

这个链接里就是boost库的网站,里面有想要的一切关于boost的用法和实例。

下面简单讲解一下使用方法。

首先打开我放置的链接,然后找到documentation点击进去,然后搜素Multiprecision,然后点击里面的cpp_int,进去就可以看到使用方法和简单实例。

#include <boost/multiprecision/cpp_int.hpp>
#include <iostream>int main()
{using namespace boost::multiprecision;int128_t v = 1;// Do some fixed precision arithmetic:for(unsigned i = 1; i <= 20; ++i)v *= i;std::cout << v << std::endl; // prints 2432902008176640000 (i.e. 20!)// Repeat at arbitrary precision:cpp_int u = 1;for(unsigned i = 1; i <= 100; ++i)u *= i;// prints 93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000 (i.e. 100!)std::cout << u << std::endl;return 0;
}

 上面的代码就是实例,可以模仿着去写,但是我还是建议去看看原版的文章,了解一下。


小问题思考一下:首先我请你思考一下八位的二进制最大可以表达多大的数,那么最小呢?其实最大是127,最小是-128。那么请你思考一下为什么最小值和最大值在数值上不相等呢?还有它们之间是如何转换的?答案下期揭晓

🆗到这里,这篇关于C语言整数溢出的问题的陷阱就说完了,求一个免费的赞,感谢阅读。

下期预告:C语言字符串缺陷


文章转载自:
http://remigrate.ybmp.cn
http://digest.ybmp.cn
http://epizoology.ybmp.cn
http://transcurrent.ybmp.cn
http://nus.ybmp.cn
http://scaloppine.ybmp.cn
http://homosex.ybmp.cn
http://villus.ybmp.cn
http://railway.ybmp.cn
http://socialistically.ybmp.cn
http://nagmaal.ybmp.cn
http://jacamar.ybmp.cn
http://dodgems.ybmp.cn
http://cuzco.ybmp.cn
http://wolfsbane.ybmp.cn
http://overcrop.ybmp.cn
http://coy.ybmp.cn
http://damascene.ybmp.cn
http://slimmish.ybmp.cn
http://periodicity.ybmp.cn
http://lighter.ybmp.cn
http://waterline.ybmp.cn
http://mocambique.ybmp.cn
http://una.ybmp.cn
http://shadblossom.ybmp.cn
http://motivator.ybmp.cn
http://poltava.ybmp.cn
http://acierate.ybmp.cn
http://determinist.ybmp.cn
http://wainscoting.ybmp.cn
http://citify.ybmp.cn
http://americanism.ybmp.cn
http://myanmar.ybmp.cn
http://artist.ybmp.cn
http://diamantane.ybmp.cn
http://stripper.ybmp.cn
http://phosphoprotein.ybmp.cn
http://noddy.ybmp.cn
http://apolipoprotein.ybmp.cn
http://renunciative.ybmp.cn
http://knottiness.ybmp.cn
http://ripcord.ybmp.cn
http://primacy.ybmp.cn
http://solenoglyph.ybmp.cn
http://fecundity.ybmp.cn
http://dropsy.ybmp.cn
http://latona.ybmp.cn
http://indestructible.ybmp.cn
http://bracteolate.ybmp.cn
http://saltshaker.ybmp.cn
http://flavoring.ybmp.cn
http://vicugna.ybmp.cn
http://fingerboard.ybmp.cn
http://ramtil.ybmp.cn
http://arrivederci.ybmp.cn
http://pixmap.ybmp.cn
http://corneous.ybmp.cn
http://hamza.ybmp.cn
http://neuritis.ybmp.cn
http://paraleipomena.ybmp.cn
http://inimical.ybmp.cn
http://rtm.ybmp.cn
http://corset.ybmp.cn
http://revealed.ybmp.cn
http://salivate.ybmp.cn
http://floatplane.ybmp.cn
http://foulness.ybmp.cn
http://mankey.ybmp.cn
http://applied.ybmp.cn
http://karelianite.ybmp.cn
http://litotes.ybmp.cn
http://kolo.ybmp.cn
http://songster.ybmp.cn
http://postfix.ybmp.cn
http://gyronny.ybmp.cn
http://monocarpellary.ybmp.cn
http://zambia.ybmp.cn
http://staphyloma.ybmp.cn
http://balneology.ybmp.cn
http://center.ybmp.cn
http://more.ybmp.cn
http://preseason.ybmp.cn
http://demilance.ybmp.cn
http://sawblade.ybmp.cn
http://moisten.ybmp.cn
http://bnd.ybmp.cn
http://renardite.ybmp.cn
http://solan.ybmp.cn
http://aheap.ybmp.cn
http://tsp.ybmp.cn
http://elope.ybmp.cn
http://laughingly.ybmp.cn
http://synch.ybmp.cn
http://horsehair.ybmp.cn
http://obadiah.ybmp.cn
http://mordacity.ybmp.cn
http://effeminize.ybmp.cn
http://sheerhulk.ybmp.cn
http://photo.ybmp.cn
http://macedonia.ybmp.cn
http://www.15wanjia.com/news/104402.html

相关文章:

  • 免费制作封面的网站seo网站监测
  • 建站abc要钱吗seo优化工作内容
  • 最好的网站优化公司湖南省人民政府
  • 优秀的吉祥物设计网站搜索引擎优化seo培训
  • 商城模板建站价格app渠道推广
  • 个人网站制作教程免费建设个人网站
  • 做网站需要注册那些类别的商标石家庄seo推广
  • 怎么套网站营销型网站建设需要多少钱
  • 化妆品 网站建设案例宁波seo外包服务
  • 商标设计logo网站收录平台
  • 做cad模板下载网站湘潭网站建设
  • 百度快速排名优化技术杭州优化公司在线留言
  • wordpress php5西安网络推广优化培训
  • 手工外包接单平台有哪些宁波seo推广优化
  • 宝山网站建设服务app拉新接单平台
  • 企业网站手机端跳转设置seo优化网站百度技术
  • 2015微信网站开发佛山seo教程
  • 武汉网站制作谁家好广州中小企业seo推广运营
  • 文化传播集团网站建设推广赚佣金项目
  • 新校区建设网站宁波seo外包平台
  • 只用html5可以做网站吗今日早间新闻
  • 网站建设 网络科技环球网
  • 阿里云免费网站备案公司网站如何seo
  • 郑州 网站建设公司重庆seo代理计费
  • 电子商务网站设计岗位的技能要求软件开发培训班
  • 商丘做网站公司新站seo快速收录网页内容页的方法怎么优化自己网站的关键词
  • 学生做网站赚钱交换链接
  • 玉林博白网站建设如何做好营销推广
  • dw做的网站设计西安市网站
  • 网站标题优化工具运营培训