当前位置: 首页 > 科技观察

说说为什么是0x3f?

时间:2023-03-20 10:21:10 科技观察

为什么是0x3f?在编写dijkstra等经典算法时;我们希望dist数组的初始值为无穷大,经常使用memset(dist,0x3f,sizeofdist)。为什么将0x3f3f3f3f分配给dist?首先,让我们看看0x3f有多大。#include#include#includeusingnamespacestd;intmain(){inta[1];memset(a,0x3f,4);cout<dist[t]+w[t][j]等判断。如果两个大于0x3f3f3f3f的数相加,后果不堪设想。因为overflow并不报错,而且算法逻辑复杂,所以我们往往很难定位到真正的错误。附:最近收集了很多C++STL的妙用...下图中的C++真的很感人。笔记主要放在github/PiperLiu/ACMOI_Journey[1]的“经验”里。有空的时候收拾一下。另外,不同数据类型的memset初始值当然不同。有一篇优秀的文章:【自用】如何清除memset中int、longlong、float、double的极值[2],也可以阅读原文。比如int对应0x3f,float对应0x4f。值得注意的是,最近在看歪总代码的时候,使用了初始化-INF,直接memset(a,-0x3f,sizeofa)也是可以的,无非就是0x3f的反转并添加一个,从00111111到11000001。但是添加会爆炸。参考文献[1]github/PiperLiu/ACMOI_Journey:https://github.com/PiperLiu/ACMOI_Journey[2]【个人使用】如何清除int,longlong,float,double的memset极值:https://博客。csdn.net/vmurder/article/details/46537613