99精品久久精品一区二区-亚洲熟妇无码?v在线播放-日本国产精品无码字幕在线观看-久久久亚洲永夜AV-亚洲一级无码一区二区一-免费国产成高清人在线视频-中文字幕乱码免费观看-国产毛片精品妇女久久久

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運營的一線實戰(zhàn)洞察。

進制轉(zhuǎn)換原理與C語言實現(xiàn):位權(quán)、補碼與任意進制互轉(zhuǎn)

進制轉(zhuǎn)換原理與C語言實現(xiàn):位權(quán)、補碼與任意進制互轉(zhuǎn) 前段時間調(diào)一個串口通信程序設(shè)備手冊里寫著狀態(tài)寄存器返回 0x3F7低 8 位是錯誤碼高 4 位是設(shè)備類型。結(jié)果同事直接把這個十六進制數(shù)當(dāng)十進制打印出來成了 3.977折騰了大半天才定位到問題是進制轉(zhuǎn)換沒做。這種事兒在嵌入式、網(wǎng)絡(luò)協(xié)議、底層開發(fā)里真的太常見了。進制轉(zhuǎn)換看著是大學(xué)一年級的基礎(chǔ)課但真到了實戰(zhàn)里——二進制小數(shù)要怎么精確轉(zhuǎn)十進制負數(shù)轉(zhuǎn)十六進制為什么有時候是 FFFFFFFB八進制和十六進制之間能不能繞開十進制直接換字符串形式的任意進制互轉(zhuǎn)在 C 語言里怎么寫才不容易踩坑——能一次說清楚的人真不多。這篇我把整數(shù)、小數(shù)、正數(shù)、負數(shù)、任意進制相互轉(zhuǎn)換全部過一遍從位權(quán)原理講到手算步驟再給出可編譯運行的 C 語言完整實現(xiàn)。適合剛學(xué)計算機基礎(chǔ)的學(xué)生鞏固原理也適合寫驅(qū)動、做協(xié)議解析、處理數(shù)據(jù)編碼的工程師當(dāng)工具文收藏。1. 進制到底在說什么位權(quán)機制是唯一核心很多人學(xué)進制轉(zhuǎn)換死記8421法則換一個基數(shù)就懵。根源在于沒有理解位權(quán)。所謂位權(quán)就是數(shù)字里每一個位置所代表的實際大小。十進制里我們天天用卻不覺得——123 從右往左依次是個位10^0、十位10^1、百位10^2所以 123 1×10^2 2×10^1 3×10^0。這個10^n就是十進制每一位的位權(quán)。1.1 位權(quán)的排布規(guī)律對任意進制 base從小數(shù)點往左數(shù)整數(shù)部分的第 0 位權(quán)重是 base^0第 1 位是 base^1第 2 位是 base^2依次類推。從小數(shù)點往右數(shù)小數(shù)部分的第 1 位權(quán)重是 base^(-1)第 2 位是 base^(-2)依次類推。這里有幾個新手常犯的錯誤。第一整數(shù)位從 0 開始編號不是從 1 開始。第二小數(shù)位第一位權(quán)重是 base^(-1)也就是 1/base不是 base 分之一再除以 base。第三位權(quán)只取決于位置和進制跟這位數(shù)字本身沒關(guān)系——數(shù)字的值只是位權(quán)的倍數(shù)。拿二進制 1101.01 舉例從最左邊開始1 × 2^3 1 × 2^2 0 × 2^1 1 × 2^0 0 × 2^(-1) 1 × 2^(-2)。你先別急著算結(jié)果把這個展開式記住它就是后面所有轉(zhuǎn)換公式的祖宗。1.2 用多項式視角統(tǒng)一所有進制把任意進制數(shù)字拆開看本質(zhì)上就是一個多項式d_n × base^n d_(n-1) × base^(n-1) ... d_1 × base^1 d_0 × base^0 d_(-1) × base^(-1) ...其中 d_i 是第 i 位的數(shù)字base 是基數(shù)。為什么說這個視角重要因為它把進制轉(zhuǎn)換從一個需要分別記憶多個口訣的問題統(tǒng)一成了一個求多項式值的問題。任意進制轉(zhuǎn)十進制就是直接把這個多項式算出來十進制轉(zhuǎn)任意進制就是把這個多項式按照新的進制重新展開任意進制之間互轉(zhuǎn)本質(zhì)上就是反復(fù)進行多項式求值和多項式重展開兩個動作。理解了這一點你就不會再被二進制轉(zhuǎn)八進制要三位一組八進制轉(zhuǎn)十進制要乘以 8 的冪這類碎片化口訣困住所有操作都能從原理推導(dǎo)出來。我見過很多工作多年的同事手算十進制轉(zhuǎn)二進制飛快但讓他解釋為什么除 2 取余要逆序排列就又說不清了——因為他只背了口訣沒吃透多項式展開。下面我按照最實用的路徑把每一步都拆開講。2. 任意進制轉(zhuǎn)十進制按權(quán)展開的通用公式這一節(jié)處理的問題是給你一個字符串形式的數(shù)比如2A.3F進制是十六進制讓你算出它在十進制下是多少。思路只有一個每一位乘上自己的位權(quán)然后全部加起來。2.1 整數(shù)部分的展開過程整數(shù)部分按權(quán)展開從右往左依次乘 base^0、base^1、base^2……這里用幾個實例演示整個計算步驟。十六進制 0x2A 轉(zhuǎn)十進制2A 2 × 16^1 A × 16^0 2 × 16 10 × 1 32 10 42A 在十六進制里代表 10這個必須記牢。十六進制用 A~F 表示 10~15字母不分大小寫但很多程序里大寫更規(guī)范后文代碼也統(tǒng)一輸出大寫。八進制 0755 轉(zhuǎn)十進制755 7 × 8^2 5 × 8^1 5 × 8^0 7 × 64 5 × 8 5 × 1 448 40 5 493這個例子在 Linux 文件權(quán)限里非常常見chmod 755的權(quán)限數(shù)值就是按八進制語義理解的改成十進制去看反而別扭。二進制 10110011 轉(zhuǎn)十進制從右往左算更不容易出錯位 1 0 1 1 0 0 1 1 權(quán) 2^7 2^6 2^5 2^4 2^3 2^2 2^1 2^0 值 128 0 32 16 0 0 2 1 和 128 32 16 2 1 179實際操作的時候我習(xí)慣從右往左逐位累加1 2 0 0 16 32 0 128 179。這個方向能避免寫錯 2 的冪次。2.2 小數(shù)部分的展開過程小數(shù)部分的關(guān)鍵是位權(quán)是負指數(shù)。二進制小數(shù)點后第 1 位代表 1/2第 2 位代表 1/4第 3 位代表 1/8這個數(shù)列是 1/2、1/4、1/8、1/16……每一項是前一項的一半跟直覺完全吻合。二進制 101.101 轉(zhuǎn)十進制整數(shù)部分1×2^2 0×2^1 1×2^0 4 0 1 5 小數(shù)部分1×2^(-1) 0×2^(-2) 1×2^(-3) 0.5 0 0.125 0.625 結(jié)果 5.625注意二進制小數(shù)能精確表示的值非常有限。0.1、0.2 這樣的十進制小數(shù)在二進制下是無限循環(huán)的所以浮點數(shù)計算會出現(xiàn) 0.1 0.2 ! 0.3 的現(xiàn)象。這一點在第三節(jié)細說。十六進制 3.A 轉(zhuǎn)十進制3.A 3 × 16^0 A × 16^(-1) 3 10/16 3 0.625 3.625這里有個受益終身的對應(yīng)關(guān)系值得記住二進制小數(shù)0.1是十進制0.5十六進制小數(shù)0.8是十進制0.5八進制小數(shù)0.4是十進制0.5。每個進制的小數(shù)點后一位都等于 1/base理解了這條其他對應(yīng)關(guān)系都能秒推。2.3 常用進制對照速查表手算和調(diào)試時經(jīng)常要快速查值下面這個表覆蓋了 0~15 在四種常見進制下的表示建議直接保存在筆記里。十進制二進制八進制十六進制000011112102231133410044510155611066711177810001089100111910101012A11101113B12110014C13110115D14111016E15111117F提示這張表只需要記住二進制 1000 八進制 10但 1000 看起來像十進制一千這個反直觀點就能避免以后調(diào)試權(quán)限位時把 0755 和 755 混為一談。3. 十進制轉(zhuǎn)任意進制整數(shù)除基、小數(shù)乘基的分治流程從十進制轉(zhuǎn)出去整數(shù)部分和小數(shù)部分的算法完全不同必須先分開再合并。整數(shù)部分是除法小數(shù)部分是乘法方向也相反——這是整篇最容易繞暈的地方。3.1 整數(shù)部分除基取余逆序排列算法口訣六個字除基取余逆序。舉個完整例子十進制 42 轉(zhuǎn)二進制42 ÷ 2 21 余 0 ← 最低位 21 ÷ 2 10 余 1 10 ÷ 2 5 余 0 5 ÷ 2 2 余 1 2 ÷ 2 1 余 0 1 ÷ 2 0 余 1 ← 最高位從下往上讀取余數(shù)得到101010。驗證一下1×2^5 0×2^4 1×2^3 0×2^2 1×2^1 0×2^0 32 8 2 42正確。**為什么余數(shù)要逆序**你想第一次除以 2 的余數(shù)是原數(shù)里 2^0 位上的值第二次的余數(shù)是 2^1 位上的值最后一次的余數(shù)是最高位。而我們寫數(shù)字的時候最高位在最左邊所以必須把先算出來的低位放在后面最后算出來的高位放在前面。**如果目標(biāo)是十六進制同樣操作但除數(shù)換成 16**十進制 493 轉(zhuǎn)十六進制——493 ÷ 16 30 余 13 → D 30 ÷ 16 1 余 14 → E 1 ÷ 16 0 余 1 → 1逆序得到0x1ED。這個案例可以反向驗證1×256 14×16 13 256 224 13 493成立。3.2 小數(shù)部分乘基取整順序排列算法口訣也是六個字乘基取整順序。**注意這次是正序不要逆序。**舉例十進制 0.625 轉(zhuǎn)二進制0.625 × 2 1.25 取整數(shù)位 1 ← 第一位 取掉整數(shù)后剩 0.25 0.25 × 2 0.5 取整數(shù)位 0 ← 第二位 0.5 × 2 1.0 取整數(shù)位 1 ← 第三位正序讀取結(jié)果0.101。驗證0.5 0 0.125 0.625完美。**為什么小數(shù)要正序**第一次乘以 2 得到的整數(shù)部分是小數(shù)點后第一位的值權(quán)重 2^(-1)第二次得到的是小數(shù)點后第二位權(quán)重 2^(-2)依次類推。小數(shù)部分的位權(quán)從左到右遞減所以算出來的順序正好就是寫出來的順序不用倒。3.3 浮點精度會造成哪些假象十進制小數(shù)轉(zhuǎn)二進制時不是所有小數(shù)都能有限位數(shù)精確表示。最經(jīng)典的是 0.10.1 × 2 0.2 取 0 0.2 × 2 0.4 取 0 0.4 × 2 0.8 取 0 0.8 × 2 1.6 取 1 0.6 × 2 1.2 取 1 0.2 × 2 0.4 取 0 …… 從這里開始循環(huán)0.1 的二進制展開是無限循環(huán)的0.0001100110011001100...永遠寫不完。計算機里用 double 存儲時只能截取 52 位有效數(shù)字所以浮點數(shù)本質(zhì)上都是近似值。做進制轉(zhuǎn)換工具時小數(shù)部分必須設(shè)置一個最大精度參數(shù)比如轉(zhuǎn)換 20 位就停下來否則會出現(xiàn)死循環(huán)或者因為浮點誤差算出 0.9999999999 這種尷尬值。還有一個實際開發(fā)中的坑當(dāng)小數(shù)乘基后得到 0.999999999999 或 1.0000000001 時取整會得到錯誤的一位數(shù)。嚴謹?shù)霓D(zhuǎn)換程序需要在取整前做一個 epsilon 容差判斷——如果 frac 距離 1 的差距小于 1e-10就把它當(dāng)作 1 處理同時向高位進位。這個細節(jié)我在第六節(jié)的代碼里給出了處理方式。4. 2的冪進制間互轉(zhuǎn)三位一組和四位一組的快捷規(guī)則如果要把二進制轉(zhuǎn)八進制最笨的辦法是先把二進制轉(zhuǎn)十進制再把十進制轉(zhuǎn)八進制。但這個流程對 2 的整數(shù)次冪進制二進制、四進制、八進制、十六進制、三十二進制來說純屬繞路因為它們之間存在天然的分組對應(yīng)關(guān)系。4.1 為什么八進制和十六進制這么特殊八進制的基數(shù)是 8 2^3所以1 位八進制數(shù)精確對應(yīng) 3 位二進制數(shù)。十六進制的基數(shù)是 16 2^4所以1 位十六進制數(shù)精確對應(yīng) 4 位二進制數(shù)。這個對應(yīng)關(guān)系不存在任何進位誤差可以直接查表或分組完成。反過來也成立二進制轉(zhuǎn)八進制從小數(shù)點開始分別向左、向右每 3 位一組不夠位數(shù)用 0 補齊。二進制轉(zhuǎn)十六進制同樣規(guī)則但每 4 位一組。4.2 轉(zhuǎn)換對照表和速算技巧十六進制和二進制的高位對應(yīng)關(guān)系是最常用的把下面這行刻進腦子里0x0 0000 0x4 0100 0x8 1000 0xC 1100 0x1 0001 0x5 0101 0x9 1001 0xD 1101 0x2 0010 0x6 0110 0xA 1010 0xE 1110 0x3 0011 0x7 0111 0xB 1011 0xF 1111做幾個完整示例。二進制 110101110.1011 轉(zhuǎn)八進制整數(shù)部分從右往左每 3 位分組110 101 110分別對應(yīng)6 5 6。小數(shù)部分從左往右每 3 位分組101 100最后一組補兩個 0 湊成 3 位對應(yīng)5 4。所以結(jié)果是656.54八進制。二進制 110101110.1011 轉(zhuǎn)十六進制整數(shù)部分從右往左每 4 位分組0001 1010 1110最前面補三個 0對應(yīng)1 A E。小數(shù)部分1011對應(yīng)B。結(jié)果是0x1AE.B。注意對二進制小數(shù)分組時方向是相反的。整數(shù)部分是從右往左分組小數(shù)部分是從左往右分組。很多人第一次轉(zhuǎn)小數(shù)就不管三七二十一從右往左分結(jié)果全部錯位。4.3 實戰(zhàn)場景顏色值、權(quán)限值、協(xié)議包頭HTML/CSS 顏色值#FF8800本質(zhì)是把紅色 FF、綠色 88、藍色 00 三個十六進制字節(jié)拼接在一起。想在代碼里快速判斷顏色變化先把 FF255、88136、000 這三個十六進制轉(zhuǎn)十進制立刻就知道 RGB 值是多少。Linux 文件權(quán)限chmod 754和chmod 0754在權(quán)限位上其實有微妙區(qū)別但八進制轉(zhuǎn)二進制時一目了然7111讀寫執(zhí)行、5101讀執(zhí)行、4100只讀。網(wǎng)絡(luò)協(xié)議包頭解析以太網(wǎng)協(xié)議類型字段0x0800表示 IPv40x86DD表示 IPv6。抓包工具顯示的十六進制你是先字節(jié)組再轉(zhuǎn)十進制還是直接心算經(jīng)常做協(xié)議解析的人對 0800、0806、86DD 這幾個值必須形成肌肉記憶。5. 負數(shù)參與進制轉(zhuǎn)換補碼機制與符號位處理負數(shù)是最容易讓人翻車的環(huán)節(jié)。核心問題在于在計算機里負號不是一個可以存儲的自然概念數(shù)字的符號必須用編碼規(guī)則表達。于是出現(xiàn)了原碼、反碼、補碼三種表示方式而現(xiàn)代計算機幾乎全部采用補碼。5.1 計算機為什么不用負號假設(shè) 8 位二進制如果按原碼設(shè)計正數(shù) 1 是00000001負數(shù) -1 就是10000001最高位當(dāng)符號位。這樣做的后果是00000000和10000000分別表示 0 和 -0出現(xiàn)了兩個零浪費編碼空間。減法無法直接用加法器實現(xiàn)。1 (-1)用原碼算00000001 10000001 10000010結(jié)果是 -2完全錯誤。補碼方案解決了這兩個問題。負數(shù)的補碼定義是該數(shù)絕對值取反加一。在補碼體系里減法和加法完全統(tǒng)一CPU 只需要一套加法電路這直接決定了計算機硬件可以做得更簡單更快。5.2 從原碼到補碼的標(biāo)準流程和手算實例給定十進制 -5要求 8 位二進制補碼步驟是第一步 寫出絕對值 5 的二進制原碼 0000 0101 第二步 按位取反0變11變0 1111 1010 第三步 加 1 1111 1011所以-5 的 8 位二進制補碼是 11111011。驗證一下把它當(dāng)無符號數(shù)看是 251而 251 - 256 -5說明這個編碼表示的確實是 -5。這個無符號值減 2^n的驗證法在調(diào)試時非常有用后面代碼里我就用這個邏輯做補碼輸出。**十六進制場景int32_t 類型的 -5 在內(nèi)存里是 0xFFFFFFFB。**如果你用%x格式打印一個 int 變量得到的是-5 的 32 位補碼 11111111 11111111 11111111 11111011 0xFFFFFFFB很多初學(xué)者看到-5打印成FFFFFFFB以為是程序 bug實際上這是補碼的直接呈現(xiàn)。5.3 補碼形式和帶符號形式怎么選擇寫進制轉(zhuǎn)換工具時你要回答一個關(guān)鍵問題負數(shù)轉(zhuǎn)進制輸出-101還是輸出補碼11111011面向人類閱讀比如打印日志、教學(xué)演示用帶符號形式先轉(zhuǎn)絕對值再加負號輸出-101、-0x2A。面向機器存儲比如寫文件、協(xié)議封包、寄存器值必須用補碼形式且一定要同時指定位數(shù)寬度。8 位、16 位、32 位、64 位下同一個負數(shù)的補碼完全不同。兩者混淆是生產(chǎn)事故的重災(zāi)區(qū)。我見過一個同事把協(xié)議里的負數(shù)直接按帶符號形式轉(zhuǎn)成-3去解析結(jié)果報文解析整體偏移了 4 個字節(jié)。所以代碼實現(xiàn)里我會同時提供兩種輸出模式由調(diào)用方?jīng)Q定。5.4 補碼的回推驗證手算補碼容易出錯必須學(xué)會回推驗證。已知補碼11111011想知道它是哪個負數(shù)第一步 減 1 1111 1010 第二步 按位取反 0000 0101 5 第三步 加上負號 -5這就完成了補碼到十進制負數(shù)的還原。跟正向流程對稱正向是取反加一反向是減一取反。提示判斷一個補碼是正還是負看最高位。最高位是 0 就是非負數(shù)是 1 就是負數(shù)。這個規(guī)則在后續(xù)寫代碼判斷符號時是核心邏輯。6. C語言實現(xiàn)任意進制互轉(zhuǎn)一份可直接編譯的參考代碼網(wǎng)絡(luò)熱搜里進制轉(zhuǎn)換 C 語言一直是高頻詞說明很多人卡在代碼實現(xiàn)上。這里給出一份完整、可編譯、支持正負整數(shù)和小數(shù)、支持 2~36 進制的參考實現(xiàn)。整體設(shè)計思路是任意進制 A 的數(shù)先轉(zhuǎn)成十進制再轉(zhuǎn)成目標(biāo)進制 B這樣做能保證代碼通用性和正確性。6.1 函數(shù)拆分與設(shè)計思路我把功能拆成四個獨立函數(shù)各司其職函數(shù)名職責(zé)關(guān)鍵點char_to_val/val_to_char數(shù)字字符與 0~35 數(shù)值互轉(zhuǎn)支持大小寫統(tǒng)一大寫輸出any_base_to_dec字符串形式的任意進制數(shù)轉(zhuǎn)十進制處理/-符號自動糾錯非法字符dec_to_any_base十進制整數(shù)轉(zhuǎn)任意進制處理負數(shù)絕對值輸出帶符號形式dec_to_twos_with_bits十進制整數(shù)按指定位寬輸出補碼只對 2 的冪進制生效frac_to_any_base十進制純小數(shù)轉(zhuǎn)任意進制加入 epsilon 容差防無限循環(huán)設(shè)計上有一個取舍要說清楚整數(shù)和小數(shù)分開處理。因為 C 語言里long long只能表示整數(shù)浮點數(shù)需要單獨的字符串拼接邏輯。任何進制的數(shù)一旦混入小數(shù)位就先以字符串形式解析成整數(shù)部分 小數(shù)部分分別轉(zhuǎn)換后拼接。6.2 完整代碼與逐段說明#include stdio.h #include string.h #include ctype.h #include math.h #define MAX_DIGITS 256 #define EPSILON 1e-12 /* 字符轉(zhuǎn)數(shù)值支持大小寫非法字符返回 -1 */ int char_to_val(char c) { if (c 0 c 9) return c - 0; if (c A c Z) return c - A 10; if (c a c z) return c - a 10; return -1; } /* 數(shù)值轉(zhuǎn)字符只輸出大寫 */ char val_to_char(int v) { if (v 10) return 0 v; return A (v - 10); } /* 任意進制字符串轉(zhuǎn)十進制整數(shù)支持正負號 */ long long any_base_to_dec(const char* str, int base) { if (!str || base 2 || base 36) return 0; int i 0, neg 0; if (str[0] -) { neg 1; i 1; } else if (str[0] ) { i 1; } long long res 0; for (; str[i]; i) { int v char_to_val(str[i]); if (v 0 || v base) break; /* 非法字符截斷 */ res res * base v; } return neg ? -res : res; } /* 十進制整數(shù)轉(zhuǎn)任意進制輸出帶符號形式 */ void dec_to_any_base(long long num, int base, char* out) { int neg 0; unsigned long long v; if (num 0) { neg 1; /* 用 (num1) 再取反避免 LLONG_MIN 取絕對值時溢出 */ v (unsigned long long)(-(num 1)) 1ULL; } else { v (unsigned long long)num; } char buf[MAX_DIGITS]; int len 0; if (v 0) { buf[len] 0; } while (v 0) { buf[len] val_to_char(v % base); v / base; } int pos 0; if (neg) out[pos] -; while (len 0) out[pos] buf[--len]; out[pos] \0; } /* 十進制整數(shù)轉(zhuǎn)指定寬度的補碼字符串僅適用于 2、4、8、16、32 進制 */ /* bits 是二進制位寬比如 8/16/32/64 */ void dec_to_twos_with_bits(long long num, int base, int bits, char* out) { int unit; if (base 2) unit 1; else if (base 4) unit 2; else if (base 8) unit 3; else if (base 16) unit 4; else if (base 32) unit 5; else { dec_to_any_base(num, base, out); return; } /* 取低 bits 位。注意這里把有符號數(shù)字按無符號截斷到指定位寬 */ unsigned long long mask (bits 64) ? ~0ULL : ((1ULL bits) - 1ULL); unsigned long long v (unsigned long long)num mask; char buf[MAX_DIGITS]; int len 0; if (v 0) buf[len] 0; while (v 0) { buf[len] val_to_char(v % base); v / base; } int width (bits unit - 1) / unit; /* 輸出的最少字符數(shù) */ int pos 0; for (int i len; i width; i) out[pos] 0; while (len 0) out[pos] buf[--len]; out[pos] \0; } /* 十進制純小數(shù)轉(zhuǎn)任意進制字符串precision 是小數(shù)位數(shù) */ void frac_to_any_base(double frac, int base, int precision, char* out) { int pos 0; out[pos] .; for (int i 0; i precision; i) { frac * base; int digit (int)frac; frac - digit; /* 浮點容差當(dāng) frac 無限接近 1 時按進位處理 */ if (fabs(frac - 1.0) EPSILON) { digit; frac 0.0; } out[pos] val_to_char(digit); if (frac EPSILON i precision - 1) break; /* 已經(jīng)精確到零 */ } out[pos] \0; } int main(void) { /* 測試用例 */ char out[MAX_DIGITS]; printf( 整數(shù)轉(zhuǎn)換測試 \n); printf(十進制 42 轉(zhuǎn)二進制: %s\n, (dec_to_any_base(42, 2, out), out)); printf(十六進制 0x2A 轉(zhuǎn)十進制: %lld\n, any_base_to_dec(2A, 16)); printf(\n 負數(shù)轉(zhuǎn)換測試 \n); printf(-5 的 8 位二進制補碼: %s\n, (dec_to_twos_with_bits(-5, 2, 8, out), out)); printf(-5 的 32 位十六進制補碼: %s\n, (dec_to_twos_with_bits(-5, 16, 32, out), out)); printf(\n 小數(shù)轉(zhuǎn)換測試 \n); printf(十進制 0.625 轉(zhuǎn)二進制: %s\n, (frac_to_any_base(0.625, 2, 8, out), out)); printf(十進制 0.1 轉(zhuǎn)二進制(12位): %s\n, (frac_to_any_base(0.1, 2, 12, out), out)); printf(\n 任意進制互通測試五進制轉(zhuǎn)七進制 \n); long long dec any_base_to_dec(1234, 5); /* 五進制 1234 先轉(zhuǎn)十進制 */ dec_to_any_base(dec, 7, out); /* 再轉(zhuǎn)七進制 */ printf(五進制 1234 七進制 %s\n, out); return 0; }這份代碼編譯運行后輸出應(yīng)該是 整數(shù)轉(zhuǎn)換測試 十進制 42 轉(zhuǎn)二進制: 101010 十六進制 0x2A 轉(zhuǎn)十進制: 42 負數(shù)轉(zhuǎn)換測試 -5 的 8 位二進制補碼: 11111011 -5 的 32 位十六進制補碼: FFFFFFFB 小數(shù)轉(zhuǎn)換測試 十進制 0.625 轉(zhuǎn)二進制: .101 十進制 0.1 轉(zhuǎn)二進制(12位): .000110011001 任意進制互通測試五進制轉(zhuǎn)七進制 五進制 1234 七進制 163幾個實現(xiàn)上的關(guān)鍵點必須解釋**關(guān)于LLONG_MIN取絕對值的溢出問題。**C 語言里long long的表示范圍是非對稱的最小值 -9223372036854775808 取絕對值后是 9223372036854775808超出了有符號范圍。所以代碼里用了-(num 1) 1這個技巧先算num 1不溢出取反再加 1全程不觸發(fā)有符號溢出。關(guān)于補碼字符串的位寬。dec_to_twos_with_bits只對 2 的冪進制有效因為只有這些進制才存在x 位二進制數(shù)恰好對應(yīng) y 位目標(biāo)進制數(shù)的整數(shù)對應(yīng)關(guān)系。對十進制轉(zhuǎn)十進制補碼這種需求本身就不合理所以代碼回退到普通帶符號輸出。**關(guān)于小數(shù)轉(zhuǎn)換的容差。**0.1 在二進制下是無限循環(huán)的浮點數(shù)存的是近似值乘 2 若干次后會得到 0.9999999999999998。如果不做fabs(frac - 1.0) EPSILON的判斷會多輸出一個 0 或少進一位。這個細節(jié)是實際寫代碼時才踩到的坑教學(xué)示例通常不會提。6.3 一個簡化版面試級寫法如果你只是想在面試或筆試題里快速實現(xiàn)一個純整數(shù)版本不需要處理負數(shù)和位寬可以用這段極簡代碼#include stdio.h #include string.h char val_to_char(int v) { return v 10 ? 0 v : A v - 10; } void dec_to_base(unsigned int n, int base, char* out) { int i 0; if (n 0) { out[i] 0; } while (n 0) { out[i] val_to_char(n % base); n / base; } out[i] \0; /* 反轉(zhuǎn)字符串 */ for (int j 0, k i - 1; j k; j, k--) { char t out[j]; out[j] out[k]; out[k] t; } }這個版本只解決十進制整數(shù)轉(zhuǎn)任意進制但結(jié)構(gòu)清晰、無依賴適合作為面試手寫答案的基礎(chǔ)。7. 實操過程中最常見的錯誤與排查經(jīng)驗最后把我這些年幫人排查進制轉(zhuǎn)換問題時遇到的高頻錯誤集中列一下。這些坑看起來小卻能讓人排查一整天。7.1 字母數(shù)字混淆與大小寫問題**十六進制里1數(shù)字一和I字母 i、0數(shù)字零和O字母 o在等寬字體下極易混淆。**之前我調(diào)試一個序列號解析模塊十六進制字符串里出現(xiàn)了字母l解析函數(shù)用的char_to_val不支持小寫字母就返回 -1整個字符串被截斷數(shù)據(jù)直接錯位。規(guī)避方法很簡單解析前統(tǒng)一toupper解析函數(shù)里拒絕低于 0 或大于等于 base 的非法字符并且不要靜默截斷要報錯。生產(chǎn)代碼里我一般會返回錯誤碼而不是默默返回 0不然非法輸入會被當(dāng)成合法的 0 處理問題更難發(fā)現(xiàn)。7.2 小數(shù)轉(zhuǎn)換的浮點誤差0.1 的二進制表示無限循環(huán)double 類型根本無法精確存儲。如果做高精度進制轉(zhuǎn)換比如把0.1轉(zhuǎn)成二進制字符串去顯示你會發(fā)現(xiàn)無論換多少精度去乘最后幾位總是詭異的 99999 或 00001。解決方法有兩個方向一是像第六節(jié)代碼那樣設(shè)置 epsilon 容差二是改用十進制字符串做高精度運算把小數(shù)按位拆成整數(shù)運算完全不經(jīng)過浮點數(shù)。第二種方法的代碼會復(fù)雜很多但精度是確定性的。如果你要做一個進制轉(zhuǎn)換在線工具建議用第二種思路把用戶輸入當(dāng)作字符串處理用大數(shù)運算完成轉(zhuǎn)換才能保證 0.1 轉(zhuǎn)二進制能得到正確的前 N 位。7.3 負數(shù)取絕對值溢出的隱蔽 bug很多初學(xué) C 語言的人寫負數(shù)轉(zhuǎn)正數(shù)時會直接寫-num或abs(num)。但int和long long的最小值無法安全取絕對值這在上一節(jié)代碼注釋里已經(jīng)提到。這個 bug 最陰險的地方在于只有恰好遇到INT_MIN或LLONG_MIN時才會觸發(fā)平時測試全是正數(shù)根本發(fā)現(xiàn)不了。另一個相關(guān)陷阱是符號位擴展。把一個int8_t類型的 -1 賦給long long高 56 位會全部補 1。如果不小心做了位運算再取低 8 位結(jié)果看似沒問題但如果你直接轉(zhuǎn)十六進制輸出會得到FFFFFFFFFFFFFFFF而不是FF。所以輸出負數(shù)的十六進制時一定要明確指定位寬并手動掩碼這也是代碼里dec_to_twos_with_bits存在的意義。7.4 分組方向錯誤整數(shù)右起、小數(shù)左起二進制轉(zhuǎn)八進制或十六進制時整數(shù)部分要從小數(shù)點往左從右到左每 3 位或 4 位分組小數(shù)部分要從小數(shù)點往右從左到右分組。這兩者方向相反。我見過不止一次整數(shù)分組對了、小數(shù)分組卻按從右往左分導(dǎo)致結(jié)果差一位。記憶方法很簡單分組始終從緊貼小數(shù)點的位置開始往外走。整數(shù)是從小數(shù)點往左走碰到最左邊不夠就補 0小數(shù)是從小數(shù)點往右走碰到最右邊不夠也補 0。7.5 把 printf 的%d和%x混用導(dǎo)致誤讀printf(%x, -5)在大部分平臺上打印fffffffb很多人會驚訝負數(shù)怎么變成這么大的數(shù)。原因就是%x把有符號的-5重新解釋成了無符號整數(shù)。在調(diào)試的時候我建議明確分開想看到內(nèi)存里的真實字節(jié)就用%x配合unsigned想看數(shù)值大小就用%d。兩者要表達的東西不同混著用只會讓日志更難讀懂。另外在嵌入式開發(fā)里經(jīng)常需要從設(shè)備寄存器讀回一個值手冊寫的是補碼形式存儲。如果你直接printf(%d, reg_val)得到的小數(shù)值正好是負數(shù)的補碼語義如果寄存器是無符號類型你需要手動判斷最高位再轉(zhuǎn)成負數(shù)。這里沒有銀彈只有搞清楚你面對的數(shù)據(jù)到底是有符號還是無符號??偟膩碚f進制轉(zhuǎn)換這個主題看起來基礎(chǔ)但真要保證正確性要處理位寬、符號、浮點精度、字符串解析這么多細節(jié)。我自己最深刻的體會是任何時候都不要在代碼里硬編碼這個進制只有 2、8、10、16的假設(shè)把轉(zhuǎn)換邏輯參數(shù)化到任意 2~36 進制配合清晰的函數(shù)邊界能省下后面大量在協(xié)議解析、數(shù)據(jù)編碼這類場景里的返工時間。以后要是碰到需要轉(zhuǎn)換超大數(shù)超過 64 位的十進制值的需求可以在現(xiàn)在的代碼基礎(chǔ)上把long long換成一串十進制字符做大數(shù)除法那是另一個話題了但今天梳理的這些核心思想和調(diào)試經(jīng)驗在那套實現(xiàn)里也完全適用。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
天天橾日日橾夜夜橾17| 成人综合视频在线| 大香蕉啪啪啪| 五月婷婷九九久久| 伊人久久丁香五月91| 狼人狠狠操| 99热这里只有精品21| 99久久天堂婷婷| 欧美一级色| 97婷婷丁香五月| 亚洲xx网| 成人在线视频一区| 亚洲午夜国产成人电影VA国产欧…| 月丁香久久久| 美女久久婷婷| 久久人妻熟女一区二区| 欧洲色色| 97色婷| 亚洲综合色网| 亚洲最大激情无码| 色爱亚洲| 一丁香五月天月AV| 天堂综合久| 亚洲性爱日韩无码| www,五月丁,com| 婷婷五月色播网| 天色综合网| ..真实国产乱子伦毛片| 激情小说色五月| 色播五月婷婷| 六月丁丁香| 丁XX 成人| 九九婷婷五月天影视| 丁香六月婷婷开心| 五月开心婷婷网| 99热高清在线| 黄网免费观看| 中美日韩成人在线| 激情五月综合| 色色丁香| 欧美性猛交XXXX乱大交极品| 97热91| 丁香激情五月天| 天天爽人人综合免费7799| 美女妹子后射视频网站在线观看| 五月亭亭狠狠| 9久国产精品| 99免费| 伍月婷丁香花全集| 熟女激情五月天 | 国产综合激情五月久久| 天天天天天天天操| 丁香六月欧美| 人人爱国产| 91免费看片| 免费亚洲婷婷| 国产精品电影| av中文网| 超碰不卡在线| www99热| www.天天色综合| 婷婷导航| www.minyis.com【JT】币址百万U预算可预付QQ2101460746 | 99色中文| 色情综合网| 大香蕉av在线| 久久丁香社| 婷婷五月网图片区| 99热日韩这里只有精品| 丁香六月在线| 99色免费观看全部| 色99xx| 狠狠综合区| 久久九九玖玖| 99色在线观看视频| 五月丁香六月情| 九九久久综合| 97婷婷狠狠久久综合9色| 久久亚洲天堂| 天天爽人人爽| 婷综合| 丁香六月婷婷久久综合| 综合九九久久| 久久只这里有精品| 五月天久久久| 五月丁香久久婷| WWW久久久| 五月天婷婷久色| 丁香五月婷中字幕| 婷婷五月色| 色色色色色色色五月| 色色五月天com| 超碰chaompinm| Jh7Uf088VHafNm| 色婷婷亚洲婷婷在线观看| 99热6精品| 欧美性猛交99久久久久99按摩| 五月婷九月| 任你日视频| 欧美婷婷五月无砖| 久久婷婷五月天| 性欧美大战久久久久久久83| 超碰9| 夜夜爽日日躁| 丁香五月婷婷激情网| 亚洲第一成人无码A片| 五月色情婷婷| www久久艹| 精品一二三区久久AAA片| 骚逼视频一区2区| 色情五月天丁香社区| 久久视频婷婷| 91凹凸在线| 丁香激情六月天婷婷| 99综合免费视频| 国产精品成人AV在线| 婷婷在线播放| 91青娱乐青青草| 色五月xxx| 日日夜夜爽爽| 久久九九国产精品怡红院| www.超碰97| 先锋资源婷婷| 这里只有精彩视| 成人国产综合| 亚洲顶级VA在线观看-高清完整版在线影院观看-S022AV | 久久久久激情| 日本英国美国欧美亚洲国产精亚洲日韩精品在线观看 | 久久婷婷九月国产精品| 丁香婷婷人妻| 亚洲AV网址| 亚洲精品久久久无码| 婷婷五月18永久免费网站| 第四色婷婷日本| 久久er99| av中文字幕免费观看| WWW.99视频| 五月天激情网址| 久热99热| 9久久网| 97色五月天| 丁香五月色网| 9久久精品视频| 涩涩五| 五月丁香综合激情| 99男人的天堂| 亚洲成人av在线播放| 亚洲色色色| www.maotanji.com| 热久久这里只有精品| 疯狂做受XXXX高潮A片动画| 久热黄色| 丁香五月婷婷av| 超极99精品| 99热只有精品在线播放| 99色精品| 婷婷五月天成人导航| 久9热视频| 热久91| 婷婷丁香成人在线视频| 在线99热| 五月综合激情久久| 丁香激情五月天| 激情综合五月丁香| 日日色综合| 亚洲午夜一区二区| 五月婷六月| HD久久精品视频| 青草热视频这里只有精品| 五月天婷婷无码| 色婷婷a| www夜夜| 51精品国内探花| 97韩国久久电影院| 亚洲V国产V欧美V久久久久久| 色婷婷五月天激情| 九九精品热| 99久久婷婷| 久久停停超碰| 激情美女五月天| 久久丁香五月| 色噜噜狠狠色综合日日免费| 97色射| 久久99成人性爱高清视频| 色欲一区二区三区精品A片 | 婷婷五月天日本无码| 人妻内射一区二区在线视频| 久久五月婷婷开心网| 国产毛片精品一区二区色欲黄A片| 丁香六月久久| 天天爽夜夜操| 色婷婷狠狠久久综合五月| 青青久在线视频免费观看| 天干天天干天天天天天| 曰本久久女| 五月综合777| 专区无日本视频高清8| www.天天干.com| 九九av| 婷婷五月天成人动漫 | 变态另类9| PORNY九色9l自拍视频成人| 99精品视频偷拍| 91一起操| 无码人妻一区二区三区四区| 狠狠色婷婷丁香五月| 这里只有精品无码| 五月天婷婷色在线视频免费观看| 国产一二区爆乳_1国产日韩一区二区三-成人AV| 丁香狠狠| 久七香蕉| 色婷婷成人做爰A片免费看网站| 伊人婷婷激情| 婷婷九色| 成人在线二区| av色婷婷| 伍月婷丁香花全集| 99re热99| 91九色最新视频| 99久久综合| 99碰网站| 色综啪啪网| 狠狠xx| 久热 91| 人妻少妇色综合| 久久久久人无码人妻| 五月综合丁| 九九久久五月天| 99re思思在线视频| 99热超碰天堂网| 亚洲国产99| 天天操天天日天天爽| 秋霞av不能| 婷婷精品免费久久| 五月婷婷AV| 97婷婷狠狠| 丁香六月婷婷久久综合| 久久与婷婷| 五月天激情网址| 色综合久久无码| 人人操日| 99视频网址| 婷婷五月天.com| 久久机热探花| 香蕉AV777XXX色综合一区| AAAA网站| 婷婷丁香视频| 99re热精品在线视频| www夜夜操comwww| 婷丁香五月天| 热久久999| 欧美三日本三级少妇三99| 色欲日日躁| 精品99在线看| 青青久久91| 五月丁香色色网| 婷婷久久亚洲| 人人添人人| 久久久jd| 一起草aV| 久久久日韩特色特黄AAAA| 国产67194| 五月天深爱激情网| 99秘 在线| 色九区| www.99久久久久99| 久久99草五月婷婷| 五月天丁香婷婷久久九| 久久精彩视频18| 久久婷五月| 丁香五月播播| 婷婷五月色丁香在线看| 99视频在线观看欧| 狠狠色丁香99| 26uuu国产色| 激情丁香五月天| 99精品视频网| 六月婷婷在线视频| 丁香婷婷十月| 思思色综合网站| 午夜色色色极品视频| 九月综合| 九热精品| 久久久久9| www.五月天婷婷| 日本A片一区| 99热久久这里只有精品| 午夜性做爰电影| 丁香六月在线| 色吧五月婷婷| 五月丁香香蕉| 婷婷伊人综合中文字幕| 青青草激情网| 色综合久久久久| 99综合免费视频| AV成人在线播放| 激情深爱综合网| 六月狠狠综合| 九热视频| 久久婷婷五月综合| 久99久在线观看| 婷婷九月丁香| 色狠狠五月天| 99热精品少| 久久er免费视频| 欧美激情综合| 亚洲性爱干干| 天天干天天操天天爱| 五月丁香六月婷婷不卡免费无码 | 色婷婷色综合| 久久久婷婷五月亚洲97号色| 五月丁香六月婷婷久久| 婷婷丁香五月麻豆| 九九sese| 婷婷五月六月丁香综合| 婷婷金品综合视频| 开心激情综合| 激情内射人妻1区2区3区| 久久国产一区二区三区| 色综合婷婷99| 啪啪丁香五月| 国产99美少妇| 97色色色视频| 久久久无码精品成人A片小说| 亚洲va综合va国产va中文| 狠狠操狠狠| 六九色综合婷婷五月天| 直接看的av| 涩涩五月天| 激情五月婷婷| 六月婷婷青青青视频| 91婷婷色 | 亚洲美女裸体被操在线观看| 久久婷婷夜| 日本123区日韩欧美不卡在线看| 9有码中文| 噼里啪啦完整版中文在线观看| 久久久国产精品黄毛片| 五月婷婷日| WWW.99热| 天天干夜夜欢| 一区二区成人电影| 久久全意婷婷| 午夜爱插插| 99re热精品视频国| 五月色网| 这里只有精彩视频| 98热精品| 久久婷婷六月| 色五月av| 国产精品扒开腿做爽爽爽A片唱戏| 九久九精品| 热99精品视频五月| 亚洲性色XXXXX| 婷婷久月| 狠狠色丁香| 激情超碰网| 婷婷五月色情天| 操日本人妻视频| 啪色综合| 91碰免费视频| 美女丁香五月天| 五月婷婷中文字幕| 成人无码精品1区2区3区免费看| 嘿嘿视频免费看9| 国产精品99久久久久久猫咪| 激情丁香久久| 五月婷婷六月丁香首页| 丁香五月无码| 九一牛视频探花| 婷婷噜噜| 婷婷五月丁香花综合| 婷婷色正月| 99碰碰碰| 99视频超级精品| 婷婷成人五月天成人文学小说| 网站免费一站二站| 日韩 中文 欧美| 日日操,夜夜撸| 人妻AV在线| 婷婷伊人綜合中文| 亚洲人人干| 亚洲综合草草| 97成人在线视频精品| 天天色天天干天天插| 中文成人在线| 日本黄 色 片| 色五月婷婷激情五月| 99九九精品视频| 一级内射毛片| 婷婷播播五月天| 夜夜骑夜夜撸| 影音先锋一区二区三区| 99热| 综合激情sV| 丁香婷五月| 日韩九区| 色情·com| 亚洲国产成人在线| 日韩色色视频| 先锋五月婷婷丁香草草| 五月天激情网站| 色婷婷丁香AV综合| 狠狠色丁香久久婷婷综合五月| 激情小说在线视频| 久久色情| 日韩九九| 精a品a视a频| www.色色五月天.com| www.1024久久| 六月 丁香 视频| 无码91中文字幕| 99re热| 丁香五月激情网| 婷婷五月激情网| 五月丁香综合在线| 停停五月色宗合| 欧美丁香婷婷五月| 久久影视婷婷五月| 91人碰| 99er热精品视频| 天天久| 欧美日韩中国| 五月天播播中文字幕| 天啪天啪天啪天啪| 99小视频网站| 99小视频在线观看| 五月天天综合| 亚洲激情在线| 成人做爰A片免费看网站找不到了 噼里啪啦在线观看免费完整版视频 | 午夜色婷婷| 免费AAAAA网| 九九亚洲视频| 婷婷色五月亚洲| 婷婷激情五月综合| 99.色| 中文字幕不卡网站| 五月天婷婷在线播放| 91精品综合久久久久久五月天| 久久五月天激情| 丁香六月婷婷社区| 久久久久久激情| 久久久婷婷婷| 嫩草AV久久伊人妇女超级A| 婷婷丁香五月久久| 超碰在线资源| AA丁香综合激情| 五月婷婷天堂| 最近中文字幕在线中文视频| 99er视频在线| 色人久夂| 天天插天天插| 六月丁AV| 啪啪91| 熟女人妻一区二区三区免费看| 五月婷婷就去色| 嫩模草| 67194成I人在线观看线路1| 爱射综合| 日日操,天天操| 婷婷成人在线| 97婷婷色| 久久激情五月婷婷| 亚洲精品色色| 久久ri精品视频| 99啪99| 另类精品视频在线观看| 超PEN精品在线| 久色资源| 电影蜘蛛女| 久久婷婷五月综合色和| 久操热| 青青草婷婷综合五月| 97在线干| 五月婷婷激情网| 中文久久久人妻| 天天操精品| 五月丁香香蕉| 色色色99| 五月丁香综合伦理片| 在线sebiav精品视频| 激情综合无码| 深爱激情69热| 夜夜操夜夜爽| 五月狠狠| 亚洲成人在线在线| 综合网五月| 五月丁香六月婷婷的女人| 超碰99在线观看| 开心婷婷五月中文字幕组| 91一起艹| 五月丁香日逼| 国产精品扒开腿做爽爽爽A片唱戏| 夜夜夜夜夜骑撸| 99在线观看视频免费| 任我干视频在线观看| 超碰国产在线| 五月开心久久| 丁香五月婷婷俺也要去| 天天舔天天插天天爱| 免费啪啪啪网站| 欧美日韩999| 五月婷婷亚洲色视频| 六月丁香婷啪射| 超碰99在线观看| 人妻中文字幕网| 久久综合99综合| 久久丁香| 色婷婷成人网| 天天爱天天做天天操| 国产日日夜夜操| 五月婷精品| 91九色大屁股| 激情婷婷综合网| 国产真人做爰视频免费| 久久丁香五月天| 丁香六月激情| 一级二级色大片| 天堂草在线观| 久久成人精品视频| 久草久青福利| 97色五月婷婷在线| 天天天天操| www.91婷婷| 国产综合网在线| 森林影视大全,最好看的2019年视频 | www 五月天 com| 狠狠色色| 五月天激情综合在线| 欧洲S级在线观看| 久久久九九九 99| 91聚色综合网| 一区二区无码视频| 91久久国产自产拍夜夜91久久精品文字>91麻豆精品国产 | 超碰国产av| 婷婷色一二三区波多野结衣| 精品国产a| 伊人超碰在线| 久操人| 另类亚洲电影| 亚洲综合欧美色丁香婷婷888月图片| 亚洲字幕AV一区二区三区四区| 久久激情视频| 国产人妻人伦精品一区二区| 白人荫道BBWBBB大荫道| 97精品人人A片免费看| xxxx五月| 九九中文色色| 伊人网大香| 偷拍91九色| 99热碰碰| 久久总和99| 日韩操逼大片| 色婷婷五月天中文字幕| 亚州激情网站无码| 日日干夜夜撸夜夜骑| 亚洲性爱99| 欧洲激情五月天婷婷| 丁香五月狠狠在线观看| 激情综合五月.....| www.伊人天堂偷偷婷婷| 五月久久亚洲| 深爱婷婷丁香五月激情| 狠狠色综合网| 亚洲日日操| 狼人久草| 五月天婷a在线| 婷婷五月成人社区| 另类在线观看视频| 天天操夜夜啊| 热久久视频99| 人人摸人人搞| 亚洲综合1024| 国产精品99久久久久久久女警| 无码激情AAAAA片-区区| 红桃91人妻爽人妻爽| 91亚洲天堂| 国产精品日日躁夜夜躁| 六月丁香视频网站| 久久久久久丁香五月| 五月天婷综合| 丁香六月啪啪| 五月天伊人日日噜影片AV| 久久色五月天综合网| 五月精品| 国产肥白大熟妇BBBB视频| 99久久超级| 99亚洲精美视频在线观看| 97色婷婷成人综合在线观看| 狠狠操天天操天天操| 日韩爱操视频| 99色视频在线| 色99xx| 色碰碰视频| 五月丁香网中文字幕| 国产精品久久久60086| 涩五月婷婷| 色婷婷小说网| 手机在线视频观看9| 91婷婷丁香| 日日撸天天干| 五月丁香人妻| 丁香五月婷婷www..com| 天天综合久久| 人妻久久人妻久久第一区| 婷婷六月丁香五月| 9精品一区| 嫩草AV久久伊人妇女超级A| 日韩av网址大全| 99操久久| 五月丁香在线观看国产| 九九精品在线视频观看| 99热精品中文字幕| 欧美大肥婆大肥BBBBB| 色色丁香五月天社区| 婷婷色啪| 六月丁香婷婷综合在线| 国产精品久久久久9999小说| 91热在线| 五月天.com| 亚洲精品字幕在线观看| 狠狠人妻色综合| 久久A区B区| 中国女人做爰A片| 国产激情在线| 涩五月色婷婷| 欧美成人猛片AAAAAAA| 亚洲在线操| 综合激情网激情五月。| A片试看50分钟做受视频| 五月婷婷激情久久| 九九热视| 丁香五月之久操视频| 九九色色| 五月婷婷久久久| 婷婷丁香五月天色色| 婷婷激情综合色五月久久,色婷婷丁香花,丁香婷婷五月情天,久久婷婷五月综合色 | 丁香五月色色婷| 色五月激情问网站| 亚洲免费看片| 9久热在线视频精品| 丁香五月亚洲无码| 夫妇交换刺激做爰| 99久热这里有精品| 九九亚洲| 亚洲综合九九| 日本久热| 五月天久久www| 九九色99| 五月婷婷香蕉视频| 国产性色蜜乳| 老师的粉嫩小又紧水又多A片视频 粉嫩AV久久一区二区三区 | 丁香八月综合激情| 激情婷婷五月天| 激情网站五月| 色色色色色色色色网站| 狼人久草| 色香欲综合| 久久久18| 五月天婷婷久久视频| 色哟哟精品| 五月开心久久| 久久婷婷久久| 久久婷婷五月丁香网| 人妻aV在线| 国产精品色色| www.久久久久久| 欧美va在线观看| 色色色色色色色色色色色色色五月天| 丁香色五月婷婷91桃色| 懂色av粉嫩AV蜜臀AV| 五月天成人在线播放丁香| 秋霞少妇AV网站| 五月婷婷伊人久久| 日韩日比视频在线| 情久久综合五月天| 亚洲AV无码成人精品区电影网| 日韩在线aaa| 欧美私人家庭影院| 日日操,夜夜撸| 日本三级日本黄色| 精品无吗va视频免费观看| 婷婷黄色五月| 97色色色色色| 久久资源网五月婷| 丁香六月综合激情| 森林影视大全,最好看的2019年视频 | 欧美性爱特黄一级aaaassss| 99ri网站在线观看| 思思热视频在线观看| 91久久色| 99热这里只有精彩| 深爱激情五月天色婷婷| 欧美婷婷综合| 五月婷婷狠狠干| 丁香九月综合| 亚洲狠狠色丁香婷婷综合久久| 亚洲成人噜噜| 26uuu丁香婷婷五月| 久久XX| 另类小说五月天激情| 日韩美一级毛卡片| 久久99久久久久久| 欧美一区二区三区不卡影视| 去色色五月天| 丁香六月综合激情| 国产日批视频| 久久日曰| 丁香五月手机在线| 五月婷婷婷婷婷| www.sebowuyue| 婷婷五月天激情网| 欧洲激情精品婷婷| 高清无码.com| 超碰免费电影| 色婷婷小说网| 午夜丁香五月天综合| 青青草网武则天| 激情亚洲网| 五月丁香婷庭在线| 91爱操| 婷婷婷婷午夜| 天天久久狠狠色综合| 我要看激情五月天| 成人短视频在线| 色五月,com| 91九色精品女同系列| 最新亚洲色色网| 亚洲激情综| 久久久中文| 久操97| 五月天婷婷丁香视频| 182TV亚洲| av中文字幕免费观看| 成人一级片| 热这里只有精| 99色干| 大香蕉婷婷婷| 日韩婷婷| 亚洲激情综| 久久视频九九视频| 久久9999| 人人综合色| www.夜夜操| 婷婷五月天亚洲五码| 五月婷婷中文网| 成人网站在线观看视频| 久久综合66| 国产精品涩涩涩视频网站| 五月天丁香久久| 伊人狠狠操| 日韩色色小视频| 干一干xxxx| 日韩一级| 桃色五月婷婷| 激情综合五月婷婷| 97在线精品| 五月婷婷婷丁香播| 色播五月丁香| 丁香六月天AV| 国产成人综合网| 99热狠狠操| 欧美日本不卡黄色片| 国产人妻人伦精品一区二区| 色情婷婷| 99性视频| www,久久久| 九九无码| 色五月婷婷九月| 五月丁香婷婷三级| 夜夜操天天爽| 偷拍视频五月天| 精品99久久久久成人网站免费| www.色99| 在线成人网址| 91青娱乐青青草| 97日在线视频| 国产性爱一级| 九九干视频| 五月综合丁| 亚州婷婷五月激情综合| 五月婷免费视频| 五月婷婷亚洲色图| 一级无码作爱片| 99精品久久久久久久久| 第四色色六月色综合| 婷婷六久久| 99久99久| 国成人网| 69人人操人人爽| 另类国产欧美视频| 亚洲亚洲人成综合网络| 色色色色丁香| 热久综合| 丁香五月婷婷激情中文| 国产一二区爆乳_1国产日韩一区二区三-成人AV | 婷婷五月另类网站| 五月婷婷,六月丁香| 嫩草乱码一区三区四区| 五月激情久久综合网| 九九热经典视频在线观看| 亚洲色无码| 天天综合在线网| 日本色五月| 婷婷五月在线视频| 99无码视频| www.超碰在线| 内射干少妇亚洲69XXX| 中文字幕免费高清电视剧| 天久综合91综合首页| 丁香六月婷婷久久亚洲天堂| av成人在线播放| 色情丁香五月婷婷精品| 五月丁香六月在线欧美| 色五月开心五月激情五月| 思思久久青草热| 玖玖热视频| 亚洲熟女色| 51国精产品自偷自偷综合| 国产乱子轮XXX农村| 狠狠色 综合色区| 91在线日本| 日本三级日本三级99| 26uuu色噜噜精品一区| 26uuu欧美亚洲日韩| 婷婷夜夜操| 超碰亚洲天堂| 青草青草视频2免费观看| BlACKEDRAW视频一区二区| 噜噜狠狠色综合久| 狠狠搞五月天| 伊人五月丁香| 激情综合五月天| 99国产精品久久久久久久久久久| 99天堂在线观看免费视频| 丁香色影院| VA日本视频| 五月丁香六月香综合激情| 超碰资源在线| 99久久婷婷| 97超级免费无码| 人人人操Av| 亚洲99热| 丝袜人妻| 欧美色欲色欲天天天www| 丁香五月欧美色综合| 91一起艹| 68热超碰在线| 亚洲精品视频在线播放| 色婷婷狠狠色| 五月婷婷狠狠干| 婷婷丁香熟女| 日本超碰在线| 久久久久久五月天| 丁香五月婷婷影院| 婷婷色五月天色| 热久久思思热思思| 亚洲丁香五月天视频| 人妻人人操| 免费啪啪啪网站| 色六月丁香婷婷狠狠干| 婷婷色五月婷| 国产精品久久久爽爽爽麻豆色哟哟| 色五月婷婷伊人| 第二色AⅤ| 丁香婷婷91在线观看视频| 亚洲精品一区中文字幕乱码| 婷婷综合97| 欧美激情凹凸丁香网| 天天狠天天叉| 4399在线观看免费高清黄色视频| 色综合开心五月深爱五月| 久99久在线| 日本97在线观看| 日日操夜夜爽白洁| 91久久| 色婷婷四虎| 激情播丁香| 精品国产va久久久久| 色色 亚洲| 欧亚成人A片一区二区| 婷婷五月天综合久久| 日本激情五月| 91久操| 在线日韩视频| 婷婷午夜综合| 九色视频入口91| 色青青五月| 大香蕉五月天婷婷| www,色综合| 婷婷丁香综合| 无码免费人妻A片AAA毛片西瓜| 久久人操| 91婷婷色五月| 婷婷九月丁香天堂丁香天堂| 日本激情五月天‘| 高清一区二区三区日本久| 97在线精品| 日韩啪| 激情婷婷九月| 色五月六月| 久月久在线视频| 五月天自拍视频| 婷婷五月天基地| 99,色| 超碰成人在线观看| 五月婷婷www| 五月丁香龟婷婷| 色五月,com| 婷婷色五月久久| 99热在线观看| 丁香五月大片| 欧美性爱五月天| 97色色色色色色色| 深爱激情综合网| 激情综合5| 免费国产VA国产免费| 成人av在线网站| 日韩超碰在线| 五月婷婷天| 婷婷人妻激情| 久热免费| 97热九九| 操九色| 4399在线日本A片| 伊人网碰碰| 激情综合网五月丁香| 中文无码婷婷| 激情五月激情综合俺也去婷婷小说| 色色色图| 五月丁香综合网色欲| a久久| 激情婷婷五月色| 色婷婷成人色网| 日日操天天| 久久精品日| 欧美狠狠色| 亚洲综合一区二区| 五月婷婷狠狠干| 婷婷五月天AV| 大香蕉啪啪啪| 日日操夜夜爽天天天| 日韩在线看AV| 色婷婷丁香| 99爱在线| 中文久久婷婷| WWW久久久| 丁香五月性爱| 激情激情激情网| 久久午夜丁香| 97九色| 六月丁香视频网站| 精品一二三区久久AAA片| 色五月激情婷婷| 九九色区| 色色网站| 五月天婷婷爱丁香中文字幕| 日本色超碰| 久草狼人| 五月丁香色婷婷婷基地| 五月婷婷操操| 操九色| 婷婷五月天改成什么了| 色.五月综合网| 日本色五月婷婷| 丁香五月亚洲AV| 四川BBB搡BBB搡多人乱亂| 丁香五月综合网亚洲综合欧美狠狠| 碰碰碰91| 五月天婷婷综合| 色丁香六月| 五月婷婷三级| 精品无码久久久久久久久| 丁香婷婷深情五月亚洲| 综合激情婷婷| 日日噜噜夜夜狠狠久久丁香五月| 天天色天天日| 日操| 婷婷丁香先锋资源网站| 五月婷久久| 精品人妻久久久| 琪琪色五月天| 国外亚洲成AV人片在线观看| 亚洲激情五月| 激情综合五月激情XXXX| 亚洲免费电影2| 精品人妻一区二区| 国产色色色色| 99re66热这里只有精品| 另类图片五月天激情| 五月丁香六月婷综合成人综合| 五月丁香亭亭天天舔| 久久总和99| 久久久久亚洲AV综合| 欧美啪啪9| 停停五月天激情网| 亚洲激情AV| 狠狠色婷婷丁香五月| 九九热大香蕉| 久99热| 亚洲五月天第一综合干| 激情综合婷婷久久| 9久热精品在线视频| 成人五月天丁香婷| 久久这里只有精品16| 91人妻人人做人碰人人爽九色| 丁香操逼| 色色婷| www.五月天婷婷| 丁香涩涩五月天| 99热99网| 91久久五月天| 色欲五月丁香| 六月丁香五月婷婷| 丁香五月色五月| 久久这里有精品99| 无码九九| 久久9精品| 婷婷丁香五月天熟女丝袜| 三男玩一女三A片| www.99热精品| 婷婷五月天综合小说网| 色99视| 色婷五月天| 大香蕉人在线65| 在线不卡AC| 国产精品美女久久久久AV超清| 五月丁香在线看| 99色一| 99在线免费视| 久99热| 久久色天堂| 日韩成人电影Av| 4438亚洲欧美| 99热| 九九在线精品| 五月天婷婷色综合| 日本久久人人| 丁香五月网址| 婷婷五月激情中文字幕| 婷婷亚洲色| 97人人超| 五月丁香激情综合网| 9有码中文| 成人AV综合在线| 日本久久极品| 亚洲成人av中文| caop视频| 久久久久这里只有精品| 五月天激情小说| 91人人爽狠狠狠| 91热视频色网站| 棕合影院色色| 91九色欧美| 99色色网| 91狠狠色色丁香婷婷综合久久| 开心网五月色婷婷| 这里只有精品视频99| 操一操插一插| 色色 亚洲| 色五月婷婷久久| 欧美人人草| 可以看的av网站| 人妻久久久久久久| 婷婷淫淫狠狠六月| 另类小说婷婷色| 99er6热在线观看精品6| 色久免费| 欧美va欧美va差| 激情五月婷婷五月| 五月婷婷五月| 色欲午夜无码久久久久久张津瑜| 五月天婷婷AV| 人人97碰| 九九九热精品| 99热这里只有精| 爱操人妻| 天天操天天操天天操天天操天天操 | 五月婷婷在线免费观看| 伊人久久大香蕉网| 超碰91在线| 激情五月丁香婷婷| 9久久久久久久久久久| 婷婷丁香人妻天天爽| 五月天激情四射| 青草视频在线播放| 99欧美三级视频| 综合网啪| 成人短视频在线| 婷婷亚洲五月丁香综合在线| 色色色欧美色色| 99热这里精品| 午夜大香蕉| 欧美在线视频99| 综合 激情 婷婷| 日本视频欧美观看免费| YJLZZJLZZ亚洲乱熟无码| 99色激| 丁香五月 综合| 台湾佬天天日丁香婷婷五月天 | 熟女激情五月天 | 99热都是精品| 涩丁香| 色色综合激情| 婷婷丁香六月综合激情站| 99热这里只有精品2024| 五月婷亚洲精品| 久久九九爽| 江苏少妇性BBB搡BBB爽爽爽| 激情性爱婷婷| 五月天堂色| 战争与艾拉电影免费观看| 夜夜撸夜夜骑| 五月天啪啪啪| 丁香五月 性爱| 狠狠色噜噜狠狠狠狠综合| 久久久久婷婷五月热综合| 色深爱五月| 九九AV| 狠狠干五月丁香综合网| 五月天综合在线| 超碰婷婷色| 欧美色色干| 久久99久久99精品免视看婷婷| 人人干av| 久久小视频| 色原狠狠综合| 天天噜天天插| 九九精品视频在线观看| 九九aV| 久人人操| 亚洲激情无码久久| 狠狠色五月| 免费无码毛片一区二区A片| 久久黄色片| 色婷婷97| 开心五月深爱五月丁香五月激情五月| 欧美成人性爱网| 免费看欧美成人A片无码| 婷婷五月天丁香激情| 亚洲激情淫网| 日本啪啪网| 伊人大香蕉爱聚| 婷婷色五月大香蕉在线观看| 狠狠色丁香婷婷综合久久97AV| 成人免费在线电影| 色色色综合网| 成人免费在线电影| 伊人色欲五月天| 91九色熟女| 激情五月天婷婷播播久久综合91| 伊人婷婷大香蕉| 精品久久艹| 婷婷成人基地| 丁香色色色| 99精彩视频| 精品爱欲五| 综合激情伊人影视在线| 丁香五月综合激情性爱| 丁香婷婷天堂| 91人操| 天天澡天天狠天天天做| 欧美成人AAA片一区国产精品| 99色色热热| 五月婷婷视频| 国内自拍97在线| 就爱啪啪婷婷| 激情五月婷婷网| 日本免费91| 99热在线观看免费精品| 亚洲六月综合激情久久下卡| 丁香五月婷婷丫| 久久婷婷视频| 九九色院| 婷婷网五月天| 婷婷福利影院| 五月婷婷m| 日本欧美成人片AAAA| 深爱婷婷基地| 综合久久99| 91色综合| 天天综合色丁香| 婷婷五月天综合AV| 香蕉AV777XXX色综合一区| 中文字幕成人| 丁香五月婷婷啪啪| av在线观看网站| 日本视频99| 五月婷婷深深爱| WWW.久久99| 丁香五月天论坛| 7777久久亚洲中文字幕| 激情五月丁香综合网站| 亚洲综合色成丁香五月色| 另类婷婷丁香| 久久99久久99精品免视看婷婷| 亚洲精品视频在线| www.91.com黄| 热久国产| 日韩超碰在线| 色五月天堂| www.五月婷婷久久.com| 色色丁香五月天社区| 婷婷五月天激情网站| 婷婷天堂伊人| 九九视频这里只有精品| 五月婷久久综合| 丁香五月色情| 午夜在线成人网站免费观看| 婷婷五月视屏| 99爱最新免费视频在线观看| 天天射影院| 激情图片婷婷| 日韩婷婷五月| 亚洲激情五月| 99热在线爱| 天天操夜夜操| 极品人妻videosss人妻| 久热在线中文字幕色999舞 | 91丨九色丨白浆秘| WWW.99视频| 五月丁香天堂网| 99热九九这里只有精品| 色色99| 五月色导航| 欧美色激情四射| 这里只有精品无码| 六月撸婷婷| www.zbzhongsen.com| 五月丁香AV、伊人业余、性色熟妇| 极品少妇XXXX精品少妇偷拍| 视频这里只有精品16| 九九精品9| 激情五月天视频| 女操碰| 91色五月| 五月天婷综合网站| 国产精品天天狠天天看| 91人人爽久久涩噜噜噜| 激情五月,激情综合网| 99热这里只有精品55| 婷婷开心青青草| 精品一区二区三区免费毛片爱| 日本激情五月天‘| 丁香久久九九99| 九九视频这里只有精品| 99re久热只有精品6在线直播| 乱精品一区字幕二区| 久久欧洲综合网| 98永久精品| 夜夜爽天天干| 丁香六月视频| 玖玖爱导航| 九九99精品视频在线观看| 另类在线| 九九色video| 大香蕉啪啪| www.minyis.com【JT】币址百万U预算可预付QQ2101460746 | 激情色色| 99热这里有精品24| 五月婷婷深深爱| 97香蕉碰碰人妻国产欧美| 五月天天爽| 99精品激情| 艹色18p| 天天干 夜夜爽|