最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

c語言實現(xiàn)向上取整計算方法

 更新時間:2022年07月22日 09:47:22   作者:飛鳥真人  
這篇文章主要介紹了c語言實現(xiàn)向上取整計算方法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

c語言向上取整計算

用整數(shù)N 除以 M,要求向上取整數(shù)

int n = (N + M -1) / M ;

簡化后就是:

int n= (N - 1) / M +1;

最笨的辦法

int n = N / M + ((N % M != 0) ? 1 : 0 )

c語言向上取整的一點技巧

做底層或者說驅(qū)動開發(fā)時,經(jīng)常會遇到一些硬件限制,比如 STM32 有些寄存器要求 16 bit 訪問、32 bit 訪問,否則可能引發(fā) Hardfault 中斷;再比如擦除 flash 扇區(qū)時,會要求整塊擦除。這些都是硬件決定的,必須這樣做。

假設我們需要 32 bit 訪問一個地址 dst 時,如果要寫入 10 個字符(兩次寫入 8 字節(jié),所以需要 3 次才能完全寫入),一般我們是怎么做的呢?

char ? ? *str = "0123456789";
uint32_t ?len = strlen(str);
uint32_t *src = str;?
uint32_t *dst = 0x20000000;?
?
#define SIZE ? ?(4)?
?
if((len % SIZE) != 0) // 判斷是否整除
{
? len = len / SIZE + 1;
}
else
{
? len = len / SIZE;
}?
?
for(int i = 0; i < len; i++)
{
? ?dst [i] = src [i]; ?// ?32 bit 訪問
}

可以看到,上面的寫法是最容易想到的一種,也是新手最常寫的,但是有經(jīng)驗的老手會怎么寫呢?

char ? ? *str = "0123456789";
// 設置 10 字節(jié)寫入,當然一般情況下是以函數(shù)參數(shù)的形式傳入
uint32_t ?len = strlen(str);
uint32_t *src = str;?
uint32_t *dst = 0x20000000;?
?
#define SIZE ? ?(4)?
?
len = (len + SIZE - 1) / SIZE;?
?
for(int i = 0; i < len; i++)
{
? ?dst [i] = src [i]; ?// ?32 bit 訪問
}

len = (len + SIZE - 1) / SIZE; ? //重點

就上面一條代碼,簡單高效直接。

一般看到這種代碼,你就會覺得這個作者有水平,不會是新手。

事實上,魚鷹看了不少開源代碼,發(fā)現(xiàn)只要會這么操作的,代碼水平一般不會太差的。當然不是說寫出最上面代碼的水平一定不怎么樣,就像你不能說一個人寫的字很難看,然后斷定他作文水平不行是一樣的道理。

只是能寫出上面代碼的,應該可以稱之為經(jīng)驗豐富了吧。

繼續(xù)探討上面的代碼。

你會發(fā)現(xiàn)上面的代碼非常巧妙,寫入長度 + 對齊長度 - 1,這樣一來即使寫入長度只多一個,也一定會導致最終結果 + 1,這樣就巧妙的避免了 if 判斷。

而且這條語句沒有限制說一定是偶數(shù)或奇數(shù),而是任意正整數(shù)(0 和 1 除外),可謂巧妙至極。

所以你進行固件升級時,如果要計算一共需要的扇區(qū)大小,不如使用該方式吧(當然對于扇區(qū)大小不同的不行)。這會讓你的同事覺得你很有水平的。

向下取整就簡單多了:

len /= SIZE;

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • C語言構建動態(tài)數(shù)組完整實例

    C語言構建動態(tài)數(shù)組完整實例

    這篇文章主要介紹了C語言構建動態(tài)數(shù)組完整實例,幫助讀者加深對C語言數(shù)組及指針的理解,需要的朋友可以參考下
    2014-07-07
  • QT5實現(xiàn)TTS文本語音朗讀功能

    QT5實現(xiàn)TTS文本語音朗讀功能

    TTS?語音朗讀?是開發(fā)中常用的功能,Qt已經(jīng)給封裝完成,我們只需要調(diào)用即可,本文就為大家介紹了QT5如何調(diào)用實現(xiàn)文本朗讀功能的,需要的可以參考一下
    2023-05-05
  • C語言中四種取整方式,取余/取模運算以及負數(shù)取模問題詳解

    C語言中四種取整方式,取余/取模運算以及負數(shù)取模問題詳解

    這篇文章主要介紹了C語言中四種取整方式及負數(shù)取模問題,包括了算法的分析與改進,是很多程序設計競賽中常見的算法,需要的朋友可以參考下
    2021-09-09
  • C語言數(shù)據(jù)的存儲超詳細講解下篇浮點型在內(nèi)存中的存取

    C語言數(shù)據(jù)的存儲超詳細講解下篇浮點型在內(nèi)存中的存取

    使用編程語言進行編程時,需要用到各種變量來存儲各種信息。變量保留的是它所存儲的值的內(nèi)存位置。這意味著,當您創(chuàng)建一個變量時,就會在內(nèi)存中保留一些空間。您可能需要存儲各種數(shù)據(jù)類型的信息,操作系統(tǒng)會根據(jù)變量的數(shù)據(jù)類型,來分配內(nèi)存和決定在保留內(nèi)存中存儲什么
    2022-04-04
  • C++中拷貝構造函數(shù)的總結詳解

    C++中拷貝構造函數(shù)的總結詳解

    深拷貝和淺拷貝可以簡單理解為:如果一個類擁有資源,當這個類的對象發(fā)生復制過程的時候,資源重新分配,這個過程就是深拷貝,反之,沒有重新分配資源,就是淺拷貝
    2013-09-09
  • C++實現(xiàn)哈夫曼編碼

    C++實現(xiàn)哈夫曼編碼

    這篇文章主要為大家詳細介紹了C++實現(xiàn)哈夫曼編碼,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • QT編寫tcp通信工具(Server端)

    QT編寫tcp通信工具(Server端)

    這篇文章主要為大家詳細介紹了QT編寫tcp通信工具,一個類似網(wǎng)上常見的網(wǎng)絡調(diào)試工具,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • 一般函數(shù)指針和類的成員函數(shù)指針深入解析

    一般函數(shù)指針和類的成員函數(shù)指針深入解析

    以下是對一般函數(shù)指針和類的成員函數(shù)指針進行了介紹。需要的朋友可以過來參考下
    2013-08-08
  • C語言目標文件的詳細講解

    C語言目標文件的詳細講解

    最近正在閱讀關于C語言的庫,但是我還沒有find關于目標文件的解釋,這篇文章主要給大家介紹了C語言目標文件的詳細講解,文中介紹的非常詳細,需要的朋友可以參考下
    2023-01-01
  • 關于C++中由于字節(jié)對齊引起內(nèi)存問題定位分析

    關于C++中由于字節(jié)對齊引起內(nèi)存問題定位分析

    前幾天遇到一個稀奇古怪的問題,在創(chuàng)建對象的時候程序異常退出,查找代碼發(fā)現(xiàn)結構體數(shù)組問題,最終把問題簡化得到解決方法,下面小編把我的問題及解決方案分享到腳本之家平臺供大家參考下
    2021-06-06

最新評論

石台县| 临潭县| 攀枝花市| 本溪| 安康市| 十堰市| 廊坊市| 南华县| 利津县| 通州区| 新丰县| 铁岭县| 太保市| 巩义市| 玉树县| 东明县| 都安| 漳浦县| 谢通门县| 抚远县| 贺州市| 苏尼特右旗| 平顶山市| 金华市| 茶陵县| 阿克苏市| 柳林县| 苍南县| 彭泽县| 遂宁市| 修文县| 新密市| 赣榆县| 建宁县| 嘉定区| 望奎县| 霍州市| 铁岭县| 昭觉县| 临颍县| 文成县|