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

c語言實現向上取整計算方法

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

c語言向上取整計算

用整數N 除以 M,要求向上取整數

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

簡化后就是:

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

最笨的辦法

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

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

做底層或者說驅動開發(fā)時,經常會遇到一些硬件限制,比如 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 訪問
}

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

char ? ? *str = "0123456789";
// 設置 10 字節(jié)寫入,當然一般情況下是以函數參數的形式傳入
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ā)現只要會這么操作的,代碼水平一般不會太差的。當然不是說寫出最上面代碼的水平一定不怎么樣,就像你不能說一個人寫的字很難看,然后斷定他作文水平不行是一樣的道理。

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

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

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

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

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

向下取整就簡單多了:

len /= SIZE;

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

相關文章

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

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

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

    QT5實現TTS文本語音朗讀功能

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

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

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

    C語言數據的存儲超詳細講解下篇浮點型在內存中的存取

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

    C++中拷貝構造函數的總結詳解

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

    C++實現哈夫曼編碼

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

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

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

    一般函數指針和類的成員函數指針深入解析

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

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

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

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

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

最新評論

西乌珠穆沁旗| 本溪市| 焉耆| 佛教| 隆化县| 平定县| 祁门县| 平乡县| 云梦县| 多伦县| 苏尼特左旗| 象州县| 敦煌市| 拜泉县| 治多县| 屯昌县| 白朗县| 寻乌县| 廊坊市| 灵山县| 九龙县| 阿鲁科尔沁旗| 长兴县| 那曲县| 义马市| 乐至县| 石家庄市| 柞水县| 顺昌县| 华亭县| 南京市| 福海县| 晴隆县| 太原市| 武汉市| 白朗县| 新乐市| 略阳县| 张家口市| 富宁县| 张家界市|