日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
聊一聊為什么是0x3f?

 [[419429]]

為什么是 0x3f ?

寫 dijkstra 等等經(jīng)典算法時(shí);我們希望 dist 數(shù)組初始值是 無(wú)窮大 的數(shù),常常會(huì)用到 memset(dist, 0x3f, sizeof dist) 。為什么要給 dist 賦值為 0x3f3f3f3f 呢?

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來(lái)自于我們對(duì)這個(gè)行業(yè)的熱愛(ài)。我們立志把好的技術(shù)通過(guò)有效、簡(jiǎn)單的方式提供給客戶,將通過(guò)不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:域名注冊(cè)、網(wǎng)頁(yè)空間、營(yíng)銷軟件、網(wǎng)站建設(shè)、河北網(wǎng)站維護(hù)、網(wǎng)站推廣。

首先我們看一下 0x3f 有多大。

 
 
 
 
  1. #include  
  2. #include  
  3. #include  
  4. using namespace std; 
  5.  
  6. int main() 
  7.     int a[1]; 
  8.     memset(a, 0x3f, 4); 
  9.     cout << a[0]; 

輸出 1061109567 ,是10^9級(jí)別的。

memset 按照字節(jié)賦值,因此我們把 4 個(gè) 0011 1111 填充到 32 位的 int 上。但問(wèn)題是,為什么不是 0x4f 或者 0x5f ?

首先 10^9 級(jí)別足夠大,其次,也是最重要的,0x3f3f3f3f + 0x3f3f3f3f 等于 0x7e7e7e7e , 不會(huì)爆int 。

在很多算法中,我們需要進(jìn)行諸如 dist[j] > dist[t] + w[t][j] 之類的判斷,如果兩個(gè)大于 0x3f3f3f3f 的數(shù)相加,那么后果不堪設(shè)想。因?yàn)橐绯霾⒉粫?huì)報(bào)錯(cuò),算法邏輯復(fù)雜,我們往往很難定位真正的錯(cuò)誤。

附:近期收集了很多 C++ STL 的妙用... 如下圖片的 C++ 確實(shí)有點(diǎn)感觸。

筆記主要放在 github/PiperLiu/ACMOI_Journey[1] 的“經(jīng)驗(yàn)”中。有空一并整理。

此外,memset 對(duì)于不同的數(shù)據(jù)類型初始值當(dāng)然是不同的,有一篇極好的文章:【自用】 memset對(duì)于int、long long、float、double 的極值怎么清[2],閱讀原文也可查看。比如 int 對(duì)應(yīng) 0x3f, float 對(duì)應(yīng) 0x4f 。

值得注意的是,我最近在看歪總代碼時(shí),用到初始化 -INF ,直接 memset(a, -0x3f, sizeof a) 也是可以的,無(wú)非就是 0x3f 取反加一嘛,從 0011 1111 變?yōu)?1100 0001 。但是相加會(huì)爆。

參考資料

[1]github/PiperLiu/ACMOI_Journey: https://github.com/PiperLiu/ACMOI_Journey

[2]【自用】 memset對(duì)于int、long long、float、double 的極值怎么清: https://blog.csdn.net/vmurder/article/details/46537613


文章題目:聊一聊為什么是0x3f?
文章URL:http://www.5511xx.com/article/cccdjic.html