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

C生萬物C語(yǔ)言宏將整數(shù)二進(jìn)制位的奇偶數(shù)位交換

 更新時(shí)間:2023年02月09日 09:57:56   作者:Fire_Cloud_1  
這篇文章主要為大家介紹了C生萬物C語(yǔ)言使用宏將整數(shù)二進(jìn)制位的奇偶數(shù)位交換示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

?題目分析 && 實(shí)現(xiàn)思路[位運(yùn)算]

首先來說一下本題的實(shí)現(xiàn)思路??

  • 本題不僅是要使用宏來是實(shí)現(xiàn),而且還要對(duì)一個(gè)數(shù)的二進(jìn)制位進(jìn)行操作,所以我們就可以想到位運(yùn)算

1、獲取這個(gè)整數(shù)的奇數(shù)位和偶數(shù)位

  • 因?yàn)樾枰粨Q的是這個(gè)整數(shù)二進(jìn)制位的【奇數(shù)位】和【偶數(shù)位】,因此我們要先獲取到它們,這里要使用到一個(gè)很巧妙的手法,可以將這個(gè)數(shù)的奇偶位分別保存下來,就要用到在十六進(jìn)制中很奇特的兩個(gè)數(shù)——>==5 和 a== ;因?yàn)?寫成二進(jìn)制的形式為0101,1均在奇數(shù)位上。a寫成二進(jìn)制的形式為1010,1均在偶數(shù)位上
  • 對(duì)于一個(gè)數(shù)來說可以分為32個(gè)比特位,所以我們就需要8個(gè)5和8個(gè)a,將它們展開后就是0x555555550、0xaaaaaaaa;所以將這個(gè)整數(shù)與前者進(jìn)行【&】運(yùn)算便可以保留下它的奇數(shù)位;這個(gè)整數(shù)與后者進(jìn)行【&】運(yùn)算便可以保留下它的偶數(shù)位
  • 按位與的運(yùn)算規(guī)則是==全1才為1,有0即為0==

2、使用移位運(yùn)算使【奇變偶】【偶變奇】

  • 在我們獲取到奇數(shù)位和偶數(shù)位之后,就完成了第一步。接著去我們就可以將去交換奇數(shù)位和偶數(shù)位了,但是直接做整體的交換太麻煩了,也很難做到。既然在上一步中分別保留了奇數(shù)位和偶數(shù)位,那不妨分別對(duì)他們進(jìn)行操作。
  • 對(duì)于奇數(shù)位來說,要將他們整體變?yōu)榕紨?shù)位,就需要一個(gè)整體左移的操作,我們可以使用移位運(yùn)算符<<
  • 對(duì)于偶數(shù)位來說,要將他們整體變?yōu)槠鏀?shù)位,就需要一個(gè)整體右移的操作,我們可以使用移位運(yùn)算符>>
  • 移位運(yùn)算的運(yùn)算規(guī)則是==左移表示÷2,右移表示×2==

3、合并奇數(shù)位和偶數(shù)位

  • 進(jìn)行移位操作之后,奇變偶、偶變奇也就相當(dāng)于做了一次交換的操作,但是它們兩個(gè)是一個(gè)獨(dú)立的個(gè)體,并不完整,因此我們要將他們做一個(gè)拼接,這里我們使用到的又是另一個(gè)位運(yùn)算符【|】按位或
  • 按位或的運(yùn)算規(guī)則是==只要有1即為1,全0才位0==

?代碼分析

1、代碼展示

看完整體的思路之后,相信你對(duì)本題一定有了大致的方向,我們將上述的思路轉(zhuǎn)化為代碼 如果對(duì)宏定義不太清楚的可以看看這篇文章——> C生萬物 | 詳解程序環(huán)境和預(yù)處理

#define SWAP(n) num = (((n & 0xaaaaaaaa) >> 1) | ((n & 0x55555555) << 1))
int main(void)
{
	int num = 36;
	int ret = SWAP(num);
	printf("num = %d\n", num);
	return 0;
}
  • 首先的一點(diǎn)就是對(duì)于【宏】來說它和函數(shù)不一樣是它不需要聲明類型,也沒有復(fù)雜的函數(shù)體,直接給出運(yùn)算規(guī)則即可
  • 所以你可以看到,我寫的這個(gè)宏就是我在上面所說的思路轉(zhuǎn)化為的代碼。不過很重要的一點(diǎn)是寫宏的時(shí)候一定要加足括號(hào),因?yàn)閷?duì)于宏來說在預(yù)編譯階段就會(huì)直接進(jìn)行替換,若是沒有加括號(hào)的話可能會(huì)導(dǎo)致出現(xiàn)優(yōu)先級(jí)的問題

來看看運(yùn)行結(jié)果吧??

2、算法圖解分析

再通過畫圖來分析一下,就看得更清楚了

首先就是第一步,分別取出奇數(shù)位和偶數(shù)位

  • 然后進(jìn)行移位操作,使奇變偶、偶變奇

  • 最后再將32為的奇偶分列進(jìn)行一個(gè)合并

??可以看到最后的結(jié)果就是我們程序的執(zhí)行結(jié)果【24】

??總結(jié)與提煉

總結(jié)一下本文所學(xué)習(xí)到的內(nèi)容

本篇文章雖然講解的內(nèi)容并不多,但是攻克了一道難題,雖然宏的代碼看起來比較簡(jiǎn)潔,但是要想到還是需要一些時(shí)間的。如果我們?cè)趯懗绦虻臅r(shí)候能夠巧妙地運(yùn)用宏去進(jìn)行解決,就能事半而功倍

以上就是C生萬物使用宏將整數(shù)二進(jìn)制位的奇偶數(shù)位交換的詳細(xì)內(nèi)容,更多關(guān)于C 宏整數(shù)二進(jìn)制奇偶數(shù)位交換的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C++冒泡排序與選擇排序詳解

    C++冒泡排序與選擇排序詳解

    大家好,本篇文章主要講的是C++冒泡排序與選擇排序詳解,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • C++編程面向?qū)ο笕腴T全面詳解

    C++編程面向?qū)ο笕腴T全面詳解

    這篇文章主要為大家介紹了C++面向?qū)ο笕腴T的全面詳解,文章較長(zhǎng)非常全面建議收藏閱讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2021-10-10
  • 原碼, 反碼與補(bǔ)碼基礎(chǔ)知識(shí)詳細(xì)介紹

    原碼, 反碼與補(bǔ)碼基礎(chǔ)知識(shí)詳細(xì)介紹

    這篇文章講解了計(jì)算機(jī)的原碼, 反碼和補(bǔ)碼. 并且進(jìn)行了深入探求了為何要使用反碼和補(bǔ)碼, 以及更進(jìn)一步的論證了為何可以用反碼, 補(bǔ)碼的加法計(jì)算原碼的減法,需要的朋友可以參考下
    2016-12-12
  • C語(yǔ)言中結(jié)構(gòu)體封裝全局變量用法說明

    C語(yǔ)言中結(jié)構(gòu)體封裝全局變量用法說明

    這篇文章主要介紹了C語(yǔ)言中結(jié)構(gòu)體封裝全局變量用法說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • C語(yǔ)言實(shí)現(xiàn)電話簿項(xiàng)目

    C語(yǔ)言實(shí)現(xiàn)電話簿項(xiàng)目

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)電話簿項(xiàng)目,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • C/C++中棧(stack)&堆(heap)詳解及其作用介紹

    C/C++中棧(stack)&堆(heap)詳解及其作用介紹

    這篇文章主要介紹了C/C++中棧(stack)&堆(heap)詳解及其作用,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-09-09
  • Qt之使用GraphicsView框架實(shí)現(xiàn)思維導(dǎo)圖的示例

    Qt之使用GraphicsView框架實(shí)現(xiàn)思維導(dǎo)圖的示例

    思維導(dǎo)圖可以更方便的整理知識(shí),本文主要介紹了Qt之使用GraphicsView框架實(shí)現(xiàn)思維導(dǎo)圖的示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • C語(yǔ)言實(shí)現(xiàn)貪吃蛇游戲(命令行)

    C語(yǔ)言實(shí)現(xiàn)貪吃蛇游戲(命令行)

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言命令行實(shí)現(xiàn)貪吃蛇游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • C++17結(jié)構(gòu)化綁定的實(shí)現(xiàn)

    C++17結(jié)構(gòu)化綁定的實(shí)現(xiàn)

    這篇文章主要介紹了C++17結(jié)構(gòu)化綁定的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • 由static_cast和dynamic_cast到C++對(duì)象占用內(nèi)存的全面分析

    由static_cast和dynamic_cast到C++對(duì)象占用內(nèi)存的全面分析

    下面小編就為大家?guī)硪黄蓅tatic_cast和dynamic_cast到C++對(duì)象占用內(nèi)存的全面分析。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-01-01

最新評(píng)論

晋宁县| 温州市| 新津县| 万年县| 崇阳县| 拉萨市| 砚山县| 榆社县| 巍山| 信丰县| 盱眙县| 南昌县| 汝阳县| 昆山市| 昌江| 锦屏县| 南丹县| 广南县| 宁晋县| 漳州市| 富锦市| 峨边| 怀化市| 勃利县| 理塘县| 西乌珠穆沁旗| 乳源| 平远县| 循化| 安新县| 吉安市| 千阳县| 太和县| 盐边县| 华池县| 灵宝市| 申扎县| 广西| 屏东县| 巨野县| 丰顺县|