女人被狂躁到高潮视频免费无遮挡,内射人妻骚骚骚,免费人成小说在线观看网站,九九影院午夜理论片少妇,免费av永久免费网址

當(dāng)前位置:首頁 > 原創(chuàng) > 振南技術(shù)干貨集(風(fēng)云錄)
[導(dǎo)讀]我給大家出一道有意思的題目:如何快速得到一個(gè)字節(jié)的位逆序字節(jié)。比如0X33的位逆序字節(jié)是0XCC。

字節(jié)快速位逆序

我給大家出一道有意思的題目:如何快速得到一個(gè)字節(jié)的位逆序字節(jié)。比如0X33的位逆序字節(jié)是0XCC。

有人給了我這樣一段代碼:

這段代碼很簡(jiǎn)潔,也很巧妙。但是它卻不是最快的。后來作了改進(jìn):

這樣把循環(huán)打開,確實(shí)會(huì)提速不少。但它仍不是最快的實(shí)現(xiàn)方案。請(qǐng)看如下代碼:

恍然大悟了沒有?使用字節(jié)數(shù)組事先準(zhǔn)備好位逆序字節(jié),然后直接以字節(jié)的值為下標(biāo)索引,直接取數(shù)據(jù)即可。這種方法被稱為“空間換時(shí)間”。

這個(gè)問題我問過很多人,多數(shù)人并不能直接給出最佳方案。倒是有不少人問我這個(gè)問題有什么實(shí)際意義,為什么要去計(jì)算位逆序字節(jié)?請(qǐng)大家想想,如果我們把電路上的數(shù)據(jù)總線焊反或插反了該怎么解決。

關(guān)于volatile

現(xiàn)在的編譯器越來越智能,它們會(huì)對(duì)我們的代碼進(jìn)行不同程度的優(yōu)化。請(qǐng)看下例:

unsigned char a;

a=1;

a=2;

a=3;

這樣一段代碼,有些編譯器會(huì)認(rèn)為a=1與a=2根本就是毫無意義,會(huì)把它們優(yōu)化掉,只剩下a=3。但是,有些時(shí)候這段代碼是有特殊用途的:

unsigned charxdata a _at_ 0X1111;

a=1;

a=2;

a=3;

a不單單是一個(gè)變量,而是一個(gè)外部總線的端口(51平臺(tái))。向它賦值會(huì)產(chǎn)生相應(yīng)的外部總線上的時(shí)序輸出,從而對(duì)外部器件實(shí)現(xiàn)控制。這種時(shí)候,a=1和a=2不能被優(yōu)化掉。舉個(gè)例子:a所指向的外部總線端口,是一個(gè)電機(jī)控制器的接口,向它寫入1是加速,寫入2是減速,寫入3是反向。那么上面的代碼就是加速->減速->反向,這樣一個(gè)控制過程。如果被優(yōu)化的話,那最后就只有反向了。

為了防止這種被“意外”倫的情況發(fā)生,我們可以在變量的定義上加一個(gè)修飾詞volatile。

volatile unsigned charxdata a _at_ 0X1111;

a=1;

a=2;

a=3;

這樣,編譯器就會(huì)對(duì)它單獨(dú)對(duì)待,不再優(yōu)化了。

volatile最常出現(xiàn)的地方,就是對(duì)芯片中寄存器的定義,比如STM32固件庫中有這樣的代碼:

#define __IO volatile

typedef struct

{

__IO uint32_t CRL;

__IO uint32_t CRH;

__IO uint32_t IDR;

__IO uint32_t ODR;

__IO uint32_t BSRR;

__IO uint32_t BRR;

__IO uint32_t LCKR;

} GPIO_TypeDef;

這是對(duì)STM32的GPIO寄存器組的定義,每一項(xiàng)都是一個(gè)__IO類型,其實(shí)就是volatile。這樣是為了對(duì)片內(nèi)外設(shè)的物理寄存器的訪問一定是真正落實(shí)的,而不是經(jīng)過編譯器優(yōu)化,而變成去訪問緩存之類的東西。

聲明:該篇文章為本站原創(chuàng),未經(jīng)授權(quán)不予轉(zhuǎn)載,侵權(quán)必究。
換一批
延伸閱讀

在C語言中,volatile關(guān)鍵字通過約束編譯器優(yōu)化行為,為多線程編程、硬件寄存器訪問等場(chǎng)景提供底層語義支持。其核心作用在于解決變量值可能被外部因素(如硬件、中斷、其他線程)修改時(shí),編譯器優(yōu)化導(dǎo)致的內(nèi)存訪問不一致問題。這...

關(guān)鍵字: C語言 volatile

CPU的大小端模式?是指在存儲(chǔ)和處理多字節(jié)數(shù)據(jù)時(shí),字節(jié)的順序是如何排列的。它涉及到字節(jié)在內(nèi)存中的存儲(chǔ)方式以及讀取和解釋這些字節(jié)的順序。主要有兩種大小端模式:?大端模式(Big-Endian)?和?小端模式(Little-...

關(guān)鍵字: CPU 字節(jié)

最新消息,近日字節(jié)跳動(dòng) CEO梁汝波在2024年年度全員會(huì)上表示,2019-2021年,字節(jié)跳動(dòng)快速擴(kuò)張,員工數(shù)量從1萬多增加到10萬多人,不少人反饋現(xiàn)在字節(jié)該有的大公司病全有了。同時(shí)強(qiáng)調(diào)該公司今年的關(guān)鍵詞為“始終創(chuàng)業(yè),...

關(guān)鍵字: CEO 梁汝波 字節(jié)

業(yè)內(nèi)消息,近日有消息稱字節(jié)跳動(dòng)調(diào)整了薪酬結(jié)構(gòu),將原來年終獎(jiǎng)月數(shù)大于3的薪酬方案統(tǒng)一調(diào)整為3個(gè)月,也就是說年薪總包不變,月薪上升幅度約20%。官方在通知郵件中表示,此舉主要是為提升管理效率。

關(guān)鍵字: 字節(jié) 期權(quán) 激勵(lì)

最新消息,針對(duì)「字節(jié)跳動(dòng)旗下游戲部門朝夕光年正與騰訊談判出售多款游戲」一事,昨天晚間朝夕光年相關(guān)負(fù)責(zé)人回應(yīng)稱,相關(guān)團(tuán)隊(duì)還在與多個(gè)買家商談項(xiàng)目出售事宜,至今尚未敲定任何與騰訊的交易。

關(guān)鍵字: 朝夕光年 騰訊 游戲 字節(jié)

memcpy函數(shù)的功能是用來作內(nèi)存搬運(yùn),就是將數(shù)據(jù)從一個(gè)數(shù)組賦值到另一個(gè)數(shù)組。它的實(shí)現(xiàn)很簡(jiǎn)單:

關(guān)鍵字: memcpy C 語言 串化

初學(xué)C語言的時(shí)候,有一個(gè)小編程題我們應(yīng)該都記得,就是變量互換。

關(guān)鍵字: 變量互換 sizeof C 語言

補(bǔ)碼是一個(gè)很基礎(chǔ)的概念,但是對(duì)于很多人來說,其實(shí)有些迷糊,這里對(duì)補(bǔ)碼進(jìn)行一些通俗而深刻的講解。

關(guān)鍵字: C 語言 補(bǔ)碼 CPU

另外,有時(shí)候優(yōu)先級(jí)還與C語言編譯器有關(guān),同一個(gè)表達(dá)式在不同的平臺(tái)上,可能表達(dá)的意義是不同的。所以,為了代碼的可植移性、正確性以及可讀性,振南強(qiáng)烈建議多用一些()。

關(guān)鍵字: C 語言 編程語言 賦值操作

我們本希望循環(huán)5次,然后結(jié)束,但是實(shí)際情況是陷入了死循環(huán)。這種錯(cuò)誤在實(shí)際開發(fā)中,還比較難發(fā)現(xiàn)。其原因在于i的類型,無符號(hào)整型是永遠(yuǎn)不小于0的。我們需要將i的類型改為有符號(hào)型。

關(guān)鍵字: 死循環(huán) C 語言 空循環(huán)
關(guān)閉