亚洲有码Av一区二区三区_国产高清啪啪免费视频_69色视频国产_国产成人人人爆出白浆_国产精品自在线拍国_一本久久伊人热热精品无码_午夜性刺激在线看免费带字幕_助力高品质欧美狂喷水_亚洲精品日韩无码_精品无码一区二区三区蜜臀_麻豆高清国产AV_熟妇人素无码中文字幕_亚洲a级片在线观看_国产欧美日韩三区_99国产成人高清在线观看

ARTICLE DETAIL

資訊詳情

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

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

進(jìn)制轉(zhuǎn)換原理與C語言實(shí)現(xiàn):位權(quán)、補(bǔ)碼與任意進(jìn)制互轉(zhuǎn) 前段時間調(diào)一個串口通信程序設(shè)備手冊里寫著狀態(tài)寄存器返回 0x3F7低 8 位是錯誤碼高 4 位是設(shè)備類型。結(jié)果同事直接把這個十六進(jìn)制數(shù)當(dāng)十進(jìn)制打印出來成了 3.977折騰了大半天才定位到問題是進(jìn)制轉(zhuǎn)換沒做。這種事兒在嵌入式、網(wǎng)絡(luò)協(xié)議、底層開發(fā)里真的太常見了。進(jìn)制轉(zhuǎn)換看著是大學(xué)一年級的基礎(chǔ)課但真到了實(shí)戰(zhàn)里——二進(jìn)制小數(shù)要怎么精確轉(zhuǎn)十進(jìn)制負(fù)數(shù)轉(zhuǎn)十六進(jìn)制為什么有時候是 FFFFFFFB八進(jìn)制和十六進(jìn)制之間能不能繞開十進(jìn)制直接換字符串形式的任意進(jìn)制互轉(zhuǎn)在 C 語言里怎么寫才不容易踩坑——能一次說清楚的人真不多。這篇我把整數(shù)、小數(shù)、正數(shù)、負(fù)數(shù)、任意進(jìn)制相互轉(zhuǎn)換全部過一遍從位權(quán)原理講到手算步驟再給出可編譯運(yùn)行的 C 語言完整實(shí)現(xiàn)。適合剛學(xué)計算機(jī)基礎(chǔ)的學(xué)生鞏固原理也適合寫驅(qū)動、做協(xié)議解析、處理數(shù)據(jù)編碼的工程師當(dāng)工具文收藏。1. 進(jìn)制到底在說什么位權(quán)機(jī)制是唯一核心很多人學(xué)進(jìn)制轉(zhuǎn)換死記8421法則換一個基數(shù)就懵。根源在于沒有理解位權(quán)。所謂位權(quán)就是數(shù)字里每一個位置所代表的實(shí)際大小。十進(jìn)制里我們天天用卻不覺得——123 從右往左依次是個位10^0、十位10^1、百位10^2所以 123 1×10^2 2×10^1 3×10^0。這個10^n就是十進(jìn)制每一位的位權(quán)。1.1 位權(quán)的排布規(guī)律對任意進(jìn)制 base從小數(shù)點(diǎn)往左數(shù)整數(shù)部分的第 0 位權(quán)重是 base^0第 1 位是 base^1第 2 位是 base^2依次類推。從小數(shù)點(diǎn)往右數(shù)小數(shù)部分的第 1 位權(quán)重是 base^(-1)第 2 位是 base^(-2)依次類推。這里有幾個新手常犯的錯誤。第一整數(shù)位從 0 開始編號不是從 1 開始。第二小數(shù)位第一位權(quán)重是 base^(-1)也就是 1/base不是 base 分之一再除以 base。第三位權(quán)只取決于位置和進(jìn)制跟這位數(shù)字本身沒關(guān)系——數(shù)字的值只是位權(quán)的倍數(shù)。拿二進(jìn)制 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 用多項(xiàng)式視角統(tǒng)一所有進(jìn)制把任意進(jìn)制數(shù)字拆開看本質(zhì)上就是一個多項(xiàng)式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ù)。為什么說這個視角重要因?yàn)樗堰M(jìn)制轉(zhuǎn)換從一個需要分別記憶多個口訣的問題統(tǒng)一成了一個求多項(xiàng)式值的問題。任意進(jìn)制轉(zhuǎn)十進(jìn)制就是直接把這個多項(xiàng)式算出來十進(jìn)制轉(zhuǎn)任意進(jìn)制就是把這個多項(xiàng)式按照新的進(jìn)制重新展開任意進(jìn)制之間互轉(zhuǎn)本質(zhì)上就是反復(fù)進(jìn)行多項(xiàng)式求值和多項(xiàng)式重展開兩個動作。理解了這一點(diǎn)你就不會再被二進(jìn)制轉(zhuǎn)八進(jìn)制要三位一組八進(jìn)制轉(zhuǎn)十進(jìn)制要乘以 8 的冪這類碎片化口訣困住所有操作都能從原理推導(dǎo)出來。我見過很多工作多年的同事手算十進(jìn)制轉(zhuǎn)二進(jìn)制飛快但讓他解釋為什么除 2 取余要逆序排列就又說不清了——因?yàn)樗槐沉丝谠E沒吃透多項(xiàng)式展開。下面我按照最實(shí)用的路徑把每一步都拆開講。2. 任意進(jìn)制轉(zhuǎn)十進(jìn)制按權(quán)展開的通用公式這一節(jié)處理的問題是給你一個字符串形式的數(shù)比如2A.3F進(jìn)制是十六進(jìn)制讓你算出它在十進(jìn)制下是多少。思路只有一個每一位乘上自己的位權(quán)然后全部加起來。2.1 整數(shù)部分的展開過程整數(shù)部分按權(quán)展開從右往左依次乘 base^0、base^1、base^2……這里用幾個實(shí)例演示整個計算步驟。十六進(jìn)制 0x2A 轉(zhuǎn)十進(jìn)制2A 2 × 16^1 A × 16^0 2 × 16 10 × 1 32 10 42A 在十六進(jìn)制里代表 10這個必須記牢。十六進(jìn)制用 A~F 表示 10~15字母不分大小寫但很多程序里大寫更規(guī)范后文代碼也統(tǒng)一輸出大寫。八進(jìn)制 0755 轉(zhuǎn)十進(jì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ù)值就是按八進(jìn)制語義理解的改成十進(jìn)制去看反而別扭。二進(jìn)制 10110011 轉(zhuǎn)十進(jì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實(shí)際操作的時候我習(xí)慣從右往左逐位累加1 2 0 0 16 32 0 128 179。這個方向能避免寫錯 2 的冪次。2.2 小數(shù)部分的展開過程小數(shù)部分的關(guān)鍵是位權(quán)是負(fù)指數(shù)。二進(jìn)制小數(shù)點(diǎn)后第 1 位代表 1/2第 2 位代表 1/4第 3 位代表 1/8這個數(shù)列是 1/2、1/4、1/8、1/16……每一項(xiàng)是前一項(xiàng)的一半跟直覺完全吻合。二進(jìn)制 101.101 轉(zhuǎn)十進(jì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注意二進(jìn)制小數(shù)能精確表示的值非常有限。0.1、0.2 這樣的十進(jìn)制小數(shù)在二進(jìn)制下是無限循環(huán)的所以浮點(diǎn)數(shù)計算會出現(xiàn) 0.1 0.2 ! 0.3 的現(xiàn)象。這一點(diǎn)在第三節(jié)細(xì)說。十六進(jìn)制 3.A 轉(zhuǎn)十進(jìn)制3.A 3 × 16^0 A × 16^(-1) 3 10/16 3 0.625 3.625這里有個受益終身的對應(yīng)關(guān)系值得記住二進(jìn)制小數(shù)0.1是十進(jìn)制0.5十六進(jìn)制小數(shù)0.8是十進(jìn)制0.5八進(jìn)制小數(shù)0.4是十進(jìn)制0.5。每個進(jìn)制的小數(shù)點(diǎn)后一位都等于 1/base理解了這條其他對應(yīng)關(guān)系都能秒推。2.3 常用進(jìn)制對照速查表手算和調(diào)試時經(jīng)常要快速查值下面這個表覆蓋了 0~15 在四種常見進(jìn)制下的表示建議直接保存在筆記里。十進(jìn)制二進(jìn)制八進(jìn)制十六進(jìn)制000011112102231133410044510155611066711177810001089100111910101012A11101113B12110014C13110115D14111016E15111117F提示這張表只需要記住二進(jìn)制 1000 八進(jìn)制 10但 1000 看起來像十進(jìn)制一千這個反直觀點(diǎn)就能避免以后調(diào)試權(quán)限位時把 0755 和 755 混為一談。3. 十進(jìn)制轉(zhuǎn)任意進(jìn)制整數(shù)除基、小數(shù)乘基的分治流程從十進(jìn)制轉(zhuǎn)出去整數(shù)部分和小數(shù)部分的算法完全不同必須先分開再合并。整數(shù)部分是除法小數(shù)部分是乘法方向也相反——這是整篇最容易繞暈的地方。3.1 整數(shù)部分除基取余逆序排列算法口訣六個字除基取余逆序。舉個完整例子十進(jìn)制 42 轉(zhuǎn)二進(jì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。驗(yàn)證一下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)是十六進(jìn)制同樣操作但除數(shù)換成 16**十進(jìn)制 493 轉(zhuǎn)十六進(jìn)制——493 ÷ 16 30 余 13 → D 30 ÷ 16 1 余 14 → E 1 ÷ 16 0 余 1 → 1逆序得到0x1ED。這個案例可以反向驗(yàn)證1×256 14×16 13 256 224 13 493成立。3.2 小數(shù)部分乘基取整順序排列算法口訣也是六個字乘基取整順序。**注意這次是正序不要逆序。**舉例十進(jìn)制 0.625 轉(zhuǎn)二進(jì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。驗(yàn)證0.5 0 0.125 0.625完美。**為什么小數(shù)要正序**第一次乘以 2 得到的整數(shù)部分是小數(shù)點(diǎn)后第一位的值權(quán)重 2^(-1)第二次得到的是小數(shù)點(diǎn)后第二位權(quán)重 2^(-2)依次類推。小數(shù)部分的位權(quán)從左到右遞減所以算出來的順序正好就是寫出來的順序不用倒。3.3 浮點(diǎn)精度會造成哪些假象十進(jìn)制小數(shù)轉(zhuǎn)二進(jì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 的二進(jìn)制展開是無限循環(huán)的0.0001100110011001100...永遠(yuǎn)寫不完。計算機(jī)里用 double 存儲時只能截取 52 位有效數(shù)字所以浮點(diǎn)數(shù)本質(zhì)上都是近似值。做進(jìn)制轉(zhuǎn)換工具時小數(shù)部分必須設(shè)置一個最大精度參數(shù)比如轉(zhuǎn)換 20 位就停下來否則會出現(xiàn)死循環(huán)或者因?yàn)楦↑c(diǎn)誤差算出 0.9999999999 這種尷尬值。還有一個實(shí)際開發(fā)中的坑當(dāng)小數(shù)乘基后得到 0.999999999999 或 1.0000000001 時取整會得到錯誤的一位數(shù)。嚴(yán)謹(jǐn)?shù)霓D(zhuǎn)換程序需要在取整前做一個 epsilon 容差判斷——如果 frac 距離 1 的差距小于 1e-10就把它當(dāng)作 1 處理同時向高位進(jìn)位。這個細(xì)節(jié)我在第六節(jié)的代碼里給出了處理方式。4. 2的冪進(jìn)制間互轉(zhuǎn)三位一組和四位一組的快捷規(guī)則如果要把二進(jìn)制轉(zhuǎn)八進(jìn)制最笨的辦法是先把二進(jìn)制轉(zhuǎn)十進(jìn)制再把十進(jìn)制轉(zhuǎn)八進(jìn)制。但這個流程對 2 的整數(shù)次冪進(jìn)制二進(jìn)制、四進(jìn)制、八進(jìn)制、十六進(jìn)制、三十二進(jìn)制來說純屬繞路因?yàn)樗鼈冎g存在天然的分組對應(yīng)關(guān)系。4.1 為什么八進(jìn)制和十六進(jìn)制這么特殊八進(jìn)制的基數(shù)是 8 2^3所以1 位八進(jìn)制數(shù)精確對應(yīng) 3 位二進(jìn)制數(shù)。十六進(jìn)制的基數(shù)是 16 2^4所以1 位十六進(jìn)制數(shù)精確對應(yīng) 4 位二進(jìn)制數(shù)。這個對應(yīng)關(guān)系不存在任何進(jìn)位誤差可以直接查表或分組完成。反過來也成立二進(jìn)制轉(zhuǎn)八進(jìn)制從小數(shù)點(diǎn)開始分別向左、向右每 3 位一組不夠位數(shù)用 0 補(bǔ)齊。二進(jìn)制轉(zhuǎn)十六進(jìn)制同樣規(guī)則但每 4 位一組。4.2 轉(zhuǎn)換對照表和速算技巧十六進(jìn)制和二進(jìn)制的高位對應(yīng)關(guān)系是最常用的把下面這行刻進(jì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做幾個完整示例。二進(jìn)制 110101110.1011 轉(zhuǎn)八進(jìn)制整數(shù)部分從右往左每 3 位分組110 101 110分別對應(yīng)6 5 6。小數(shù)部分從左往右每 3 位分組101 100最后一組補(bǔ)兩個 0 湊成 3 位對應(yīng)5 4。所以結(jié)果是656.54八進(jìn)制。二進(jìn)制 110101110.1011 轉(zhuǎn)十六進(jìn)制整數(shù)部分從右往左每 4 位分組0001 1010 1110最前面補(bǔ)三個 0對應(yīng)1 A E。小數(shù)部分1011對應(yīng)B。結(jié)果是0x1AE.B。注意對二進(jìn)制小數(shù)分組時方向是相反的。整數(shù)部分是從右往左分組小數(shù)部分是從左往右分組。很多人第一次轉(zhuǎn)小數(shù)就不管三七二十一從右往左分結(jié)果全部錯位。4.3 實(shí)戰(zhàn)場景顏色值、權(quán)限值、協(xié)議包頭HTML/CSS 顏色值#FF8800本質(zhì)是把紅色 FF、綠色 88、藍(lán)色 00 三個十六進(jìn)制字節(jié)拼接在一起。想在代碼里快速判斷顏色變化先把 FF255、88136、000 這三個十六進(jìn)制轉(zhuǎn)十進(jìn)制立刻就知道 RGB 值是多少。Linux 文件權(quán)限chmod 754和chmod 0754在權(quán)限位上其實(shí)有微妙區(qū)別但八進(jìn)制轉(zhuǎn)二進(jìn)制時一目了然7111讀寫執(zhí)行、5101讀執(zhí)行、4100只讀。網(wǎng)絡(luò)協(xié)議包頭解析以太網(wǎng)協(xié)議類型字段0x0800表示 IPv40x86DD表示 IPv6。抓包工具顯示的十六進(jìn)制你是先字節(jié)組再轉(zhuǎn)十進(jìn)制還是直接心算經(jīng)常做協(xié)議解析的人對 0800、0806、86DD 這幾個值必須形成肌肉記憶。5. 負(fù)數(shù)參與進(jìn)制轉(zhuǎn)換補(bǔ)碼機(jī)制與符號位處理負(fù)數(shù)是最容易讓人翻車的環(huán)節(jié)。核心問題在于在計算機(jī)里負(fù)號不是一個可以存儲的自然概念數(shù)字的符號必須用編碼規(guī)則表達(dá)。于是出現(xiàn)了原碼、反碼、補(bǔ)碼三種表示方式而現(xiàn)代計算機(jī)幾乎全部采用補(bǔ)碼。5.1 計算機(jī)為什么不用負(fù)號假設(shè) 8 位二進(jìn)制如果按原碼設(shè)計正數(shù) 1 是00000001負(fù)數(shù) -1 就是10000001最高位當(dāng)符號位。這樣做的后果是00000000和10000000分別表示 0 和 -0出現(xiàn)了兩個零浪費(fèi)編碼空間。減法無法直接用加法器實(shí)現(xiàn)。1 (-1)用原碼算00000001 10000001 10000010結(jié)果是 -2完全錯誤。補(bǔ)碼方案解決了這兩個問題。負(fù)數(shù)的補(bǔ)碼定義是該數(shù)絕對值取反加一。在補(bǔ)碼體系里減法和加法完全統(tǒng)一CPU 只需要一套加法電路這直接決定了計算機(jī)硬件可以做得更簡單更快。5.2 從原碼到補(bǔ)碼的標(biāo)準(zhǔn)流程和手算實(shí)例給定十進(jìn)制 -5要求 8 位二進(jìn)制補(bǔ)碼步驟是第一步 寫出絕對值 5 的二進(jìn)制原碼 0000 0101 第二步 按位取反0變11變0 1111 1010 第三步 加 1 1111 1011所以-5 的 8 位二進(jìn)制補(bǔ)碼是 11111011。驗(yàn)證一下把它當(dāng)無符號數(shù)看是 251而 251 - 256 -5說明這個編碼表示的確實(shí)是 -5。這個無符號值減 2^n的驗(yàn)證法在調(diào)試時非常有用后面代碼里我就用這個邏輯做補(bǔ)碼輸出。**十六進(jìn)制場景int32_t 類型的 -5 在內(nèi)存里是 0xFFFFFFFB。**如果你用%x格式打印一個 int 變量得到的是-5 的 32 位補(bǔ)碼 11111111 11111111 11111111 11111011 0xFFFFFFFB很多初學(xué)者看到-5打印成FFFFFFFB以為是程序 bug實(shí)際上這是補(bǔ)碼的直接呈現(xiàn)。5.3 補(bǔ)碼形式和帶符號形式怎么選擇寫進(jìn)制轉(zhuǎn)換工具時你要回答一個關(guān)鍵問題負(fù)數(shù)轉(zhuǎn)進(jìn)制輸出-101還是輸出補(bǔ)碼11111011面向人類閱讀比如打印日志、教學(xué)演示用帶符號形式先轉(zhuǎn)絕對值再加負(fù)號輸出-101、-0x2A。面向機(jī)器存儲比如寫文件、協(xié)議封包、寄存器值必須用補(bǔ)碼形式且一定要同時指定位數(shù)寬度。8 位、16 位、32 位、64 位下同一個負(fù)數(shù)的補(bǔ)碼完全不同。兩者混淆是生產(chǎn)事故的重災(zāi)區(qū)。我見過一個同事把協(xié)議里的負(fù)數(shù)直接按帶符號形式轉(zhuǎn)成-3去解析結(jié)果報文解析整體偏移了 4 個字節(jié)。所以代碼實(shí)現(xiàn)里我會同時提供兩種輸出模式由調(diào)用方?jīng)Q定。5.4 補(bǔ)碼的回推驗(yàn)證手算補(bǔ)碼容易出錯必須學(xué)會回推驗(yàn)證。已知補(bǔ)碼11111011想知道它是哪個負(fù)數(shù)第一步 減 1 1111 1010 第二步 按位取反 0000 0101 5 第三步 加上負(fù)號 -5這就完成了補(bǔ)碼到十進(jìn)制負(fù)數(shù)的還原。跟正向流程對稱正向是取反加一反向是減一取反。提示判斷一個補(bǔ)碼是正還是負(fù)看最高位。最高位是 0 就是非負(fù)數(shù)是 1 就是負(fù)數(shù)。這個規(guī)則在后續(xù)寫代碼判斷符號時是核心邏輯。6. C語言實(shí)現(xiàn)任意進(jìn)制互轉(zhuǎn)一份可直接編譯的參考代碼網(wǎng)絡(luò)熱搜里進(jìn)制轉(zhuǎn)換 C 語言一直是高頻詞說明很多人卡在代碼實(shí)現(xiàn)上。這里給出一份完整、可編譯、支持正負(fù)整數(shù)和小數(shù)、支持 2~36 進(jìn)制的參考實(shí)現(xiàn)。整體設(shè)計思路是任意進(jìn)制 A 的數(shù)先轉(zhuǎn)成十進(jìn)制再轉(zhuǎn)成目標(biāo)進(jìn)制 B這樣做能保證代碼通用性和正確性。6.1 函數(shù)拆分與設(shè)計思路我把功能拆成四個獨(dú)立函數(shù)各司其職函數(shù)名職責(zé)關(guān)鍵點(diǎn)char_to_val/val_to_char數(shù)字字符與 0~35 數(shù)值互轉(zhuǎn)支持大小寫統(tǒng)一大寫輸出any_base_to_dec字符串形式的任意進(jìn)制數(shù)轉(zhuǎn)十進(jìn)制處理/-符號自動糾錯非法字符dec_to_any_base十進(jìn)制整數(shù)轉(zhuǎn)任意進(jìn)制處理負(fù)數(shù)絕對值輸出帶符號形式dec_to_twos_with_bits十進(jìn)制整數(shù)按指定位寬輸出補(bǔ)碼只對 2 的冪進(jìn)制生效frac_to_any_base十進(jìn)制純小數(shù)轉(zhuǎn)任意進(jìn)制加入 epsilon 容差防無限循環(huán)設(shè)計上有一個取舍要說清楚整數(shù)和小數(shù)分開處理。因?yàn)?C 語言里long long只能表示整數(shù)浮點(diǎn)數(shù)需要單獨(dú)的字符串拼接邏輯。任何進(jìn)制的數(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); } /* 任意進(jìn)制字符串轉(zhuǎn)十進(jìn)制整數(shù)支持正負(fù)號 */ 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; } /* 十進(jìn)制整數(shù)轉(zhuǎn)任意進(jì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; } /* 十進(jìn)制整數(shù)轉(zhuǎn)指定寬度的補(bǔ)碼字符串僅適用于 2、4、8、16、32 進(jìn)制 */ /* bits 是二進(jìn)制位寬比如 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; } /* 十進(jìn)制純小數(shù)轉(zhuǎn)任意進(jì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; /* 浮點(diǎn)容差當(dāng) frac 無限接近 1 時按進(jìn)位處理 */ 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(十進(jìn)制 42 轉(zhuǎn)二進(jìn)制: %s\n, (dec_to_any_base(42, 2, out), out)); printf(十六進(jìn)制 0x2A 轉(zhuǎn)十進(jìn)制: %lld\n, any_base_to_dec(2A, 16)); printf(\n 負(fù)數(shù)轉(zhuǎn)換測試 \n); printf(-5 的 8 位二進(jìn)制補(bǔ)碼: %s\n, (dec_to_twos_with_bits(-5, 2, 8, out), out)); printf(-5 的 32 位十六進(jìn)制補(bǔ)碼: %s\n, (dec_to_twos_with_bits(-5, 16, 32, out), out)); printf(\n 小數(shù)轉(zhuǎn)換測試 \n); printf(十進(jìn)制 0.625 轉(zhuǎn)二進(jìn)制: %s\n, (frac_to_any_base(0.625, 2, 8, out), out)); printf(十進(jìn)制 0.1 轉(zhuǎn)二進(jìn)制(12位): %s\n, (frac_to_any_base(0.1, 2, 12, out), out)); printf(\n 任意進(jìn)制互通測試五進(jìn)制轉(zhuǎn)七進(jìn)制 \n); long long dec any_base_to_dec(1234, 5); /* 五進(jìn)制 1234 先轉(zhuǎn)十進(jìn)制 */ dec_to_any_base(dec, 7, out); /* 再轉(zhuǎn)七進(jìn)制 */ printf(五進(jìn)制 1234 七進(jìn)制 %s\n, out); return 0; }這份代碼編譯運(yùn)行后輸出應(yīng)該是 整數(shù)轉(zhuǎn)換測試 十進(jìn)制 42 轉(zhuǎn)二進(jìn)制: 101010 十六進(jìn)制 0x2A 轉(zhuǎn)十進(jìn)制: 42 負(fù)數(shù)轉(zhuǎn)換測試 -5 的 8 位二進(jìn)制補(bǔ)碼: 11111011 -5 的 32 位十六進(jìn)制補(bǔ)碼: FFFFFFFB 小數(shù)轉(zhuǎn)換測試 十進(jìn)制 0.625 轉(zhuǎn)二進(jìn)制: .101 十進(jìn)制 0.1 轉(zhuǎn)二進(jìn)制(12位): .000110011001 任意進(jìn)制互通測試五進(jìn)制轉(zhuǎn)七進(jìn)制 五進(jìn)制 1234 七進(jìn)制 163幾個實(shí)現(xiàn)上的關(guān)鍵點(diǎn)必須解釋**關(guān)于LLONG_MIN取絕對值的溢出問題。**C 語言里long long的表示范圍是非對稱的最小值 -9223372036854775808 取絕對值后是 9223372036854775808超出了有符號范圍。所以代碼里用了-(num 1) 1這個技巧先算num 1不溢出取反再加 1全程不觸發(fā)有符號溢出。關(guān)于補(bǔ)碼字符串的位寬。dec_to_twos_with_bits只對 2 的冪進(jìn)制有效因?yàn)橹挥羞@些進(jìn)制才存在x 位二進(jìn)制數(shù)恰好對應(yīng) y 位目標(biāo)進(jìn)制數(shù)的整數(shù)對應(yīng)關(guān)系。對十進(jìn)制轉(zhuǎn)十進(jìn)制補(bǔ)碼這種需求本身就不合理所以代碼回退到普通帶符號輸出。**關(guān)于小數(shù)轉(zhuǎn)換的容差。**0.1 在二進(jìn)制下是無限循環(huán)的浮點(diǎn)數(shù)存的是近似值乘 2 若干次后會得到 0.9999999999999998。如果不做fabs(frac - 1.0) EPSILON的判斷會多輸出一個 0 或少進(jìn)一位。這個細(xì)節(jié)是實(shí)際寫代碼時才踩到的坑教學(xué)示例通常不會提。6.3 一個簡化版面試級寫法如果你只是想在面試或筆試題里快速實(shí)現(xiàn)一個純整數(shù)版本不需要處理負(fù)數(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; } }這個版本只解決十進(jìn)制整數(shù)轉(zhuǎn)任意進(jìn)制但結(jié)構(gòu)清晰、無依賴適合作為面試手寫答案的基礎(chǔ)。7. 實(shí)操過程中最常見的錯誤與排查經(jīng)驗(yàn)最后把我這些年幫人排查進(jìn)制轉(zhuǎn)換問題時遇到的高頻錯誤集中列一下。這些坑看起來小卻能讓人排查一整天。7.1 字母數(shù)字混淆與大小寫問題**十六進(jìn)制里1數(shù)字一和I字母 i、0數(shù)字零和O字母 o在等寬字體下極易混淆。**之前我調(diào)試一個序列號解析模塊十六進(jìn)制字符串里出現(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)換的浮點(diǎn)誤差0.1 的二進(jìn)制表示無限循環(huán)double 類型根本無法精確存儲。如果做高精度進(jìn)制轉(zhuǎn)換比如把0.1轉(zhuǎn)成二進(jìn)制字符串去顯示你會發(fā)現(xiàn)無論換多少精度去乘最后幾位總是詭異的 99999 或 00001。解決方法有兩個方向一是像第六節(jié)代碼那樣設(shè)置 epsilon 容差二是改用十進(jìn)制字符串做高精度運(yùn)算把小數(shù)按位拆成整數(shù)運(yùn)算完全不經(jīng)過浮點(diǎn)數(shù)。第二種方法的代碼會復(fù)雜很多但精度是確定性的。如果你要做一個進(jìn)制轉(zhuǎn)換在線工具建議用第二種思路把用戶輸入當(dāng)作字符串處理用大數(shù)運(yùn)算完成轉(zhuǎn)換才能保證 0.1 轉(zhuǎn)二進(jìn)制能得到正確的前 N 位。7.3 負(fù)數(shù)取絕對值溢出的隱蔽 bug很多初學(xué) C 語言的人寫負(fù)數(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)陷阱是符號位擴(kuò)展。把一個int8_t類型的 -1 賦給long long高 56 位會全部補(bǔ) 1。如果不小心做了位運(yùn)算再取低 8 位結(jié)果看似沒問題但如果你直接轉(zhuǎn)十六進(jìn)制輸出會得到FFFFFFFFFFFFFFFF而不是FF。所以輸出負(fù)數(shù)的十六進(jìn)制時一定要明確指定位寬并手動掩碼這也是代碼里dec_to_twos_with_bits存在的意義。7.4 分組方向錯誤整數(shù)右起、小數(shù)左起二進(jìn)制轉(zhuǎn)八進(jìn)制或十六進(jìn)制時整數(shù)部分要從小數(shù)點(diǎn)往左從右到左每 3 位或 4 位分組小數(shù)部分要從小數(shù)點(diǎn)往右從左到右分組。這兩者方向相反。我見過不止一次整數(shù)分組對了、小數(shù)分組卻按從右往左分導(dǎo)致結(jié)果差一位。記憶方法很簡單分組始終從緊貼小數(shù)點(diǎn)的位置開始往外走。整數(shù)是從小數(shù)點(diǎn)往左走碰到最左邊不夠就補(bǔ) 0小數(shù)是從小數(shù)點(diǎn)往右走碰到最右邊不夠也補(bǔ) 0。7.5 把 printf 的%d和%x混用導(dǎo)致誤讀printf(%x, -5)在大部分平臺上打印fffffffb很多人會驚訝負(fù)數(shù)怎么變成這么大的數(shù)。原因就是%x把有符號的-5重新解釋成了無符號整數(shù)。在調(diào)試的時候我建議明確分開想看到內(nèi)存里的真實(shí)字節(jié)就用%x配合unsigned想看數(shù)值大小就用%d。兩者要表達(dá)的東西不同混著用只會讓日志更難讀懂。另外在嵌入式開發(fā)里經(jīng)常需要從設(shè)備寄存器讀回一個值手冊寫的是補(bǔ)碼形式存儲。如果你直接printf(%d, reg_val)得到的小數(shù)值正好是負(fù)數(shù)的補(bǔ)碼語義如果寄存器是無符號類型你需要手動判斷最高位再轉(zhuǎn)成負(fù)數(shù)。這里沒有銀彈只有搞清楚你面對的數(shù)據(jù)到底是有符號還是無符號??偟膩碚f進(jìn)制轉(zhuǎn)換這個主題看起來基礎(chǔ)但真要保證正確性要處理位寬、符號、浮點(diǎn)精度、字符串解析這么多細(xì)節(jié)。我自己最深刻的體會是任何時候都不要在代碼里硬編碼這個進(jìn)制只有 2、8、10、16的假設(shè)把轉(zhuǎn)換邏輯參數(shù)化到任意 2~36 進(jìn)制配合清晰的函數(shù)邊界能省下后面大量在協(xié)議解析、數(shù)據(jù)編碼這類場景里的返工時間。以后要是碰到需要轉(zhuǎn)換超大數(shù)超過 64 位的十進(jìn)制值的需求可以在現(xiàn)在的代碼基礎(chǔ)上把long long換成一串十進(jìn)制字符做大數(shù)除法那是另一個話題了但今天梳理的這些核心思想和調(diào)試經(jīng)驗(yàn)在那套實(shí)現(xiàn)里也完全適用。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
懂色影视久久| 啪啪AV导航| 国产精品亚洲免费| 精品无人区麻豆乱码1区2区图片| 日日操丁香五月天| 国产精品久久久久久久久久久久久久久| 精品一区二区三区免费古装毛片香港三级日本三级人妇 | 99久久久久久亚洲精品不卡| 人妻密肉在线观看| 国产久久久久影院老熟女| 日产操逼| 999 久久久| 亚洲男人久久综合天堂| 91美女视频在线| 天天色图| 搞中出视频在线观看| 伊人丁香五月婷婷| 极品后入免费视频| 国产浮力影院第1页| 97精品在线| 日韩乱伦视频| 欧美日韩狠狠爱| 9色在线| 亚洲 中文 欧美 日韩 在线| 中文字幕久久精品一区| 玖玖玖玖精品国产剧情| 亚洲宗合网| 色婷婷蜜臀av| 老外又粗又长一晚做五次| 日本福利社| 国产精品一级片在线看| 精品国产乱码久久久| 很很很很操| 无遮挡一级毛片视频免费的| 亚洲情色婷婷五月天| 久久人妻| 伊人麻豆传媒| 丁香六月婷婷综合| 国产精品国产拍高清AV| 亚洲色图亚洲无码强奸乱伦| 凹凸视频在线观看伊人| 鸥美精品一区二区久久婷婷| 精品四五区| 97资源视频| 快点操死我| 操比国产| 麻豆精品三区视频| 热久久国产| 亚州综合图片| 日韩八十路老熟女| 人妻久热在线| 亚洲天天艹| 91美女在线视频| 色操逼网| AV天堂男人的天堂| 欧美性爽xyxOOOO| 奸色色 男人天堂 天天射| 欧美亚男人的天堂| 亚洲精品97p| 国产中文字幕在线点播| 色色亚洲| 熟妇一区,二区,三区。| 密乳无码| 日韩 欧美 校园一区| 加勒比色99999| 久久精品国产亚洲AV高清演员表| 五月综合久久| 九九九久| 久9视频| 性色av一区二区| 久久国产在线一区二区| ji熟女.com| 青娱乐休闲视频在线观看| 日本不卡三级网在线播放| 天天综合网入口~91| 国产精品内射婷婷一级二| 九九AV| 人妻丝袜二区| 综合网欧美在线| 好涩综合| 91在线综合网| 国产三级多多影院2022国产AA一级毛片无码 | 国产成自自拍在线观看| 一个国产在线综合网站| 精品久久艹| 黄片aaaaa一区| 曰韩香蕉97| www超碰| 国模吧 一区二区三区| 日韩AV色图| 中文字幕奈奈美被公侵犯| 免费网站观看www在线观| 亚洲男人综合| 大色网久久| 久久手机好看网站| 在线观看亚洲专区| 超碰色老头| 欧美熟妇人体| 激情六月婷婷| 人人干黄色| 欧美日韩国产精品久久色婷婷| 九九探花视频在线观看| 人人爱人人乐人人操| 中文字幕十五区| 免费观看的av| 久久香蕉综合一本到3atv| 艹比视频国产精品| 国产高清自拍视频| 加勒比aⅴ| 97 视频在线| 人妻熟女av国产网站| 国产家庭乱伦表演| 啊啊啊好想要| 69一区二区三区 | 五月色综合| 天天摸夜夜添无码小视频| 亚洲春色欧美| 久久五月婷| 欧美激情亚洲色图| 国产肏逼网站| 久九色| 婷婷五月天久久精品视频一区二区三区| www五月| 乱操乱伦AV| 国产97亚洲| 超碰色综合| 一区二区三区蜜桃成人撸久久东京热| 国产原创剧情在线丝袜| 欧美不卡二区| 免费在线观看国内色片网站网址| 欧美大香蕉专区网| 最新中文字幕精品在线| 激情接吻视频久久久久久| 综合久久久久久久综合网| 国产黄色小视频网站| 夜草网站| 色伊人91| 五月天啪啪| 亚洲少妇喷视频看| 97超碰色五月| 中文字幕版| 91处女视频在线观看| 久久久久久九九九九-美女久久久久久久-成人AV | 日韩一999精品| 91国产大片| 国产91专区| 欧美狠狠狠| 欧美精品三级黄片| 婷婷五月天丁香花| 国产一区二区三区久久精品太古里| 爱妻综合网| 欧美天天干| 日韩中文字幕人妻视频| 九九九网页| 噜噜噜亚洲精品| 97视频在线看| 激情五月综合网| 欧美亚洲厕所精品偷拍91 | 天天做日日做| 国产亚洲深夜激情| 人妻熟女午夜精品在线| 亚洲 欧美 偷拍 唯美| 激情五月天社区| 91亚洲黑人| 五月激情天| www..com操老师| 男人的天堂啪啪| av 模特一区了| 久久久久亚洲熟妇熟女| 五月丁香啪啪网| 91麻豆天美传媒HD| 老司机午夜精品视频| 亚洲中文一区二区三区视频| 神马久久久久久久久久久久| 国产无码精品成人| 狼人综合婷婷激情四射| 女优大全 - 91n| 狠狠操狠狠插| 亚洲在线91| 欧美激情综合| 欧美se综合| 丁香婷婷大香蕉| 久草老司机| 国模不卡| 91精品人妻一品二品三品| 欧美综合娱乐久久| 欧美变态激情网| 欧美大香蕉久| jiujiujiujingpin| 操逼视频免费日韩无码| 亚洲久久天堂| 欧洲色| 97超碰超| 九九九久久久久| 粉嫩av久久一区二区三区| 色婷婷综合久久中文字幕雪峰| 亚洲色图欧美色图另类图片| 天天透伊人| 热热色中文无码| 欧美不卡在线美女| 亚一综合久久久久久久久久| 91欧洲入口| 婷婷97| 永久免费观看的毛片的网站| 亚洲日韩青青草色月| 国产免费一区二区三区最新不卡| 亚洲色图 图片| 色婷婷婷五月天激情四射| 亚洲图片欧美色图| 超碰日韩美妻| 天天综合亚在线| 欧美一级黄片视频在线| 91男人综合| 丝袜制服字幕在线| 欧美日综合| 国内精品久久人妻性色av| 久久少妇人妻| 天美国产三级传媒| 黄色片,com| 麻豆精品.欧美精品.日韩精品.| 久久久精品国产亚洲伊人| 国产乱伦亚洲| 九九碰九九爱97超碰| 曰韩香蕉97| 国内91熟女人妻丝袜天天精品视频在线 | 欧美色综合网| 精品二区三四区五电影 | 久久久久亚洲熟妇熟女| 色999五月色| 久久久久一本一区二区青青蜜月| 99re这里只有精品3| 清柠毛片| 色性荡荡荡荡视频| 91热色| 超碰国产精品久| 九九国产| 九九热九九| 97伊人超碰| 天天插天天操| 久久久999| 男人天堂最新手机版在线青青草| 精品国模无码| 加勒比海成人视频网| 国产曰批免费观看久久久| 久久人妻少妇| 日韩av三四区| 乱伦3P视频| 99re28在线观看| 熟女一区二区| 97超碰碰碰| 蜜乳AV.COM| 欧美自拍网| 欧美爆操91| 国产女人91精品嗷嗷嗷嗷| 久久久久久久性爱| 日韩精品怡红院| 亚洲欧洲网站免费观看| 婷婷av在线中文字幕| 欧美激情亚洲情色| 久久綜合很很很| 四虎AV在线观看| 青草草免费网站av| 亚洲精品一区二区日本| 这里只有精品视频在线观看麻豆| 91热| 亚洲精品1区| 99久久这里只有精品| 草草影院日本第一页| 综合久久9| 九九九九九九九九九九九蜜桃| 中文啪啪视频| 黄色AV影视| 国产乱人伦AVA麻豆软件.| 大香蕉乱级| 精品国产乱码久久久| 97一区二区三区视频| 少妇超碰在线| 爱我干综合| 蜜乳AV网址| 懂色中文一区二区三区| 精品无码一区二区三区| 在线不欧美| 一本色道久久综合狠狠操| 久久久久9999妇女| 另类av天堂| 久草精品热视| 精品国产乱码久久久久久影片| 人人干人人搞人人摸| 色色色色日本| 免费1级a做爰片观看| a片偷拍视频| 亚洲色狠| 黄色操人| 97精品熟女少妇一区| 亚洲一区在线观看欧洲| 亚洲第一页第二页激情| 亚洲婷婷综合网| 色欧洲| 国产人妻久久精品一区二区三区| 五月天婷婷社区| 日本免费二区三区| 蜜臀久久99精品久久久久久成人小说 | 26uuu欧美日韩| 嗯嗯啊中文字幕| 亚洲超碰在线| 久久秀这里有精品| 一本正道久久熟女| 在线亚洲精品久久久| 中文字幕-区二区三区四区视频中国| 九久9热| 中国黑人三级片网站上区| 日本精品人妻少妇一区二区| 国产熟女一区二区丰满| 99re6国产精品99re| 中亚黄色三级大片| 婷婷激情五月综合| 久热热| 日韩无码极品| 美国精品国产精品| 黄色网址在线免费观看| 97色五月天完| 午夜后入| 巨乳特殊服务按摩| 26uuu最新| 日日操丁香五月天| 96精品在线| 欧美日本天堂| 97中文综合| 69麻豆天美| 久久精品久久久久久久久| 夜嗨影院| 野狼激情网| 夜夜嗷嗷一区二区| 久久久999国产精品| 94色色电影网| 日本护士高潮| 久久综合乱子伦国产免费| 欧美大香蕉97| 韩日欧亚a级| 色视频蜜乳| 大香蕉强奸乱伦| 香蕉综合网| 尤物av网站| 亚洲精品不卡一二三区| 婷婷国产精品九区| 欧美性五月| 天天干人人看综合| 99精品成人免费看| 乱久久久| 久久啊啊| 91精品久久综合熟女| oumeisetupian| 97ai亚洲| 视频黄色国产一级| 日韩专区数据列表-第3230页-精品国产一区二区三区香蕉 久久99熟女人妻中文字 | 不卡九肏| 久久久精选| 日韩美女啪啪一区| 日本三级日本三级三级人妇四虎| 清纯唯美综合亚洲| 国产无马视频| 99只有精品| 亚洲丝袜综合| 五月天开心网| 精品美女少妇一区二区| 久久久久久国产无码精品| 人妻日日夜夜精品| 91丨人妻丨国产丨丝袜| 九九久久99| 97精品视频网站| 2020久久免费视频| 天天综合日韩网| 日日爽熟女| 欧美少妇性爱网站| 九九九精品一区二区无码| 久久久新亚洲AV| 亚洲久热| 五月天日日操夜夜操| 手机在线人成免费视频| 国产吹潮女在线观看| 6080YYY午夜理论片在线观看| 天天综合色电影| 精品高清牛人盗摄一区二区三区中文字幕A片免费在线观看 | 日本三级精品| 极品色www影院| 91欧美另类| 91视频伊人| 久久111| 久操91视频| 淫淫总合网| 一区二区视频在看| 91oumei| 国产美女高潮视频| 激情五月天丁香| AV中文字幕三四五| 美女刺激久久国产欧美| 蜜臀AV午夜精品久| 九九九久千久久激情蜜桃在线看 | 夜夜操美女| 熟女自慰久久久| 亚洲人妻中文在线视频| 亚洲91网站| 乱伦图av| 78操B| 伊人色综合网| 日韩精品资源专区二区| 欧美美女在线高潮999| 亚洲人成在线放东京热| 4141514逼喷水三级片| av爱爱爱| 亚洲91射| 精品少妇后入一区二区三区四区人妻巨乳 | 天天享受天天看| 国产成人精品必看| 国产AV人人夜夜澡人人爽麻豆| 精品国产乱码久久久久久口爆网站| 啊啊啊啊啊啊啊网址在线观看| 亚洲精品影视老司机| 国产精品乱码久久久久久久| 九九热超碰| 99热| 狠色婷婷久久一区二区三区_| 国产精品一二三在线看| 伊人久久婷婷| 亚洲av成人精品一区| 激情终合网| 色综合久久88色综合久久天天| 日韩天天综合| 一区二区精品更新提醒| 欧美日本国产日韩激情视频| 亚洲男人在线观看天堂| 亚洲男人的天堂AV| 九九综合色| 黄视频免费| 一本大道青青| 超碰538| 日本99热| 一本大道不卡一二三区| 综合久久2017| 少妇内射视频| 第四色色综合91| 久操精品网| 好色综合| 五月天精品| 成人网欧美风情| 五月丁香社区婷婷日韩欧美精品影院 | 丝袜视频一区二区在线播放国产中文| 岛国成人av在线播放网址| 精品蜜乳AV免费观看| 国产又长又大又粗的视频| 啊啊啊啊啊在线观看网址| 青青久久手机线视频| 91久久青青草原精品| 久久九操在线观看| 五月天伊人| 久青草影院| 人人摸人人添人人操| 男人天堂网站| 青草精品视频一日本久久久久网站| 极品内射| 人人污日韩一区二区| 六月激情网| 黄色av片三级三级三级免费看| 久视频在线观看| 2018色综合天天操| 日本在线播放不卡一区| 97精品熟女少妇一区| 男人天堂网站| 国产精品播放| 99久草| 青青草原成人| 国产精品高朝久久久久久久| 欧美亚洲AN| 日韩精品高清资源在线 | 强奸乱伦亚洲第一页| 色激情综合网站| 欧美日韩传媒| 亚洲日韩国产精品| 亚洲欧美电影| 羞涩视频| 凹凸视频在线一区二区| 女人天堂av在线播放| 一起草视频在线| 啊啊啊久久| 天天综合网在线91| 中文字幕99999| 97综合在线| 葡萄牙性视频一二区| 神马麻豆福利院| 亚洲久9| 97超碰大| 天天草天天日| 国产AAAAAABBBBB| 91东京热男人的天堂| 人妻偷拍一区二区三区| 青娱乐欧美激情一区二区| 日韩有码 一区二区三区| 婷婷伊人五月| 芊芊操逼视频无码| 色爱三区| 一区二区激情国产熟女| 在线啊啊啊啊| 91欧美美女日韩国产婷婷| 天天看片麻豆| 欧美爱国产综合、| 欧美性性性| 国产熟女精品一区二区| 第四色奇米影视777| 99国产在线绯色一区| 精品久久久久黄少妇| 超碰综合色| 男女性扦B| 欧美啪啪色吧在线| 一区操逼| 狠狠狠狠狠干| 欧美精品 - 91爱爱| 欧洲亚洲综合| 精品人妻一二三| 天天操天天干一区二区 | 亚洲人人操| www.一本大99| 亚洲自拍青操视频| 久久久久久九九九| 97精品熟女少妇一区| 90后性网国产欧美| 97资源欧美| asc国产精品| 97色碰| 99性爱在线观看| 一二三区在线| 超碰在线第一页| 91人人| 精品中文字幕第一页| 人人爱操| 色网综合网| 欧美色图电影| 久久高清欧美国产| 欧美色图亚州激情| 91精品国产91熟女| 国产免费操逼| 高清不卡视频| 欧美丝袜中文字幕07在线| 日韩激情毛片一级久久久| 久9视频| 狠狠躁天天躁日日躁| 99999久久精| 99久久e免费热视| 色噜噜国产在线| 91天天综合在线观看| 亚洲97成人在线观看| 天天插天天插| 97天天插| 亚洲天堂人妻熟妇视频| 国产精品乱人伊人网| 狠狠入| 口爆吞精在线观看| 婷婷另类小说| a片自拍直播视频| 天天爽天天| 中文字幕精品三级久久久| 一级性爱啪啪视频| 久草毛片电影怡| 日本中文字幕不卡视频| 久久99黄色卞西瓜| 97超碰9| 黄色av一区二区在线| www.男人天堂| 国产精品无码av嫩草| 性色高清在线| 老熟女乱伦一区| 91女人的网站| 亚洲影院成人| 大香蕉免| 久久这里只精品免费福利| 久久久久久中文字幕中文字幕最新| 老鸭窝在线视频播放| 999国产精品999| 加勒比色综合| 精品一二三区久久AAA片| 国产精品密臀网在线观看| 色色色日本| 国产亚卅97| 亚洲天天做日日做天天谢日日| av情色影音| 狠狠色噜噜狠狠狠狠2018| 亚洲综合影视| 精品国产无码中文| 亚洲的天堂网| 女人高潮大叫一级毛片| 东北老熟女| 亚洲宅男天堂| 日本孕妇一区二区视频操逼免费看 | 亚欧免费| 91AV天美在线视频| 国产精品亚洲免费| 亚洲欧美日韩不卡人妻| 91麻豆天美国产欧美| 亚洲无线观看久久| 国产乱码精品久久久久久| 成人七区| 亚洲资源吧| 人妻天堂综合网| 国内亚洲高清无码| 男人的天堂日本东京热| 日本网色| 欧美第一页| 东京热av男人的天堂| 韩国黄片aaaa| 综合第一页| 欧色综合| 91操人| 啊啊啊啊操死我| 五月婷婷hd| 被体育老师抱着c到高潮| 九九九一二三| 欧洲精品在线播放| 亚洲精品无码少妇久久| 一区二区三区国产在线播放| 4虎在线视频| 五月婷婷丁香| 性爱视频无打码在线观看| 制服丝袜第二页| 又黑又大又粗| 国产真实野战在线视频| 欧美少妇色图| 亚洲第2页| 久久69| 亚洲日本天堂| 天天操女人| 操我无码| 国产JDAV无码视频在线观看| 九九九不卡| 嫩草伊人久久精品| 五月丁香久久| 国产综合网站在线播放| 操逼操2| 亚洲人精品久久久| 久久爽爽精品| 最新AVzaixian| 人人操人人摸人| 牛牛操视频逼| 日韩少妇无码| 亚洲蜜臀精品视频久久| 男人天堂综合| 欧美中文字幕男人天堂久久精品 | 少妇一区二区三区| 丝袜美腿91| 美性中文综合网| 91人妻超碰| 狠狠狠狠狠干| 久久婷婷综合国际产色怕| 98人妻精品一区二区色欲| 一本大道久| 操逼999| 蜜伊人色综合97| av天堂影视中文在字幕在线中文 | 久久久久久久国产视频| a亚洲欧美色欲| 国产三级片在线观看| 偷拍新久久| 啊啊啊不要嗯嗯在线观看| 97这里都是精品| 大香蕉伊人亚洲| 婷婷五月天av| 91操操| 国产精品自产拍在线观看社区| 午夜一区二区三区国产| 日韩福利综合一区| 久久国产在线一区二区| 狠狠操狠狠操操| 久久久久久久性爱| 欧美一二三| 亚洲97在线| 亚洲成人ab| 亚洲色图A| 欧美成人性爱视频大全| 久久久精品一区二区| 一本精品日本在线视频精品| 91AV天美在线视频| 日韩三级一区| 激情 欧美 亚洲 小说| 97在线观看免费视频l| 中文字幕av乱伦| 久久专区| 青操影院| 久久久久久久久久久六六| 国产人妖的免费的视频| 天天碰久久入| 爱欲AV| 国产成人无码高清| 大香蕉伊人网| 天天日美女的B| 五月天婷婷综合| 伊人久久在线视频观看| 亚洲综合嫩| 亚洲免费97免费| a网站免费观看| 两女互慰AV高潮喷水在线观看| 一区二区三区四区五区久久久久久| 亚洲激情网一二三四区| 高清无码 国产精品| 综合久久97| 曰本特级特黄特色黄色A级网站高清在线免费看 | 3P乱轮视频| av亚欧| 婷婷性网| 91碰碰| 久久伊人青青草| 日韩在线视频1234| 日夜精品| 草草草草视频| 色香综合天天影视综合 | 蜜臀久久一区二区| 一区二区三区精品视频| 亚洲图片激情综合另类| 日本不卡一区二区| 蜜臀一区二区三区亚洲最新章节在线观看 - 高清蜜臀一区二区三区亚洲全集播放 | 日日操免费视频| 变态综合色| 我爱操| 久久亚洲天堂| 国产乱码精品久久久久久| 99999无码| 久久久一级| 五月天激情四射| 国产树林里野战在线看| 精品一区二区成人| 欧美性爱日韩性爱| 麻豆久久视频在线地址| 色婷婷网| 香蕉99秘 精品一区丁香| 国产9l 大屁股| 五月天伊人| 久久婷综合| 久操com| 日本视频在线观看污污污| 国产四虎在线| 丁香五月天激情综合| 熟女六十路| 成人三一级一片aaa| 大黄片做爱的大的| 在线色导航| 大香焦A片| 国产欧美精选自拍一区| 国产91av在线播放| ji熟女.com| 韩日性爱av| 亚洲第2页| 国产亚洲禁久一区二区| 婷婷五月天影院| 五月丁香六月婷| 日本在线一二 | 中国大陆国产高清AⅤ毛片| 久久午夜鲁丝片| 久久久久亚洲av综合波多野制衣| 欧美日产国产在线成人第一区| 国产一级137片内射麻豆| 日本三级A片网站com| 曰韩操B| 全免费a敌肛交毛片免费| 91天堂色男人的天堂| 亚洲啪啪性视频| 狠狠操夜夜操蜜桃视频三区| 91九九九馒头| 色综合20p| 精品在线78| 综合夜夜| 亚洲天堂一区二区久久| 日本精品一区二区中文字幕| 国产亚洲在线观看| 肉丝网站91| 欧美青青草视频| 蜜臀网 一区| 性暴力欧美猛交在线直播| 久热香蕉精品在线视频| 五月丁香综合网| 性色高清在线| 国产日韩中文字幕欧美| 久操视频在线观看| 色yeye成人免费视频| 婷婷五月在线视频| 97 九色| 久草这里只有精品| 人人操人人操人人操人人操人人操人人人11.CM| 色婷婷激一区二区三区 | 日韩国产成人自拍视频| 亚洲另类综合欧美| 色阁阁AV综合网| 超碰97网站| 黄色网址在线免费观看| 91亚州日韩高清| 999熟女精品| 91狠狠综| 日本123区操B视频| 国内精品久久国产,www香蕉久久五月丁香,亚洲欧美日韩精品永久在线,日本精品一 | 人人模人人看| 成年女人18级毛片毛片免费观看| 久久视网78| www.91视频网| 黄色av片三级三级三级免费看| 一区黄二区黄| 色色97爱| 在线中文字幕极品av| 熟妇视频一区二区三区在线观看| 国产精品69久久久久孕妇欧美 | 成人影 天天操 亚洲| 99在线精品观看视频中文| 黄片免费视频2019| 超91综合网| 夜夜嗨老熟女AV一区二区三区| 欧美日韩性爱电影在线| 久久99国产综合精品女同| 老鸭窝成人| 日本成人A片免费看| 91在线限制级| 亚洲欧美日韩偷拍色图| 五月婷婷综合网| 熟女久久| 人人操人人摸人| 人妻内射一区二区在线视频| 97色伦97色伦国产欧美| 91精品电影18| 少妇精品久久| 99热亚洲| 极品尤物女神在线观看| 在线啊啊啊啊| 亚洲色图欧美激情| 久久久999日本大片| 91热热色| 色色五月天激情| 欧美一区二区三熟女剧情| 色综合av男人天堂| 无毛精品| 欧美三级中文字幕hd| 欧美色日| aⅴ日韩成人电影av在线免费看av大全| 欧美综合在线91| 日韩欧洲操屄视频| 国产精品亚洲四五区在线观看| 日本不卡一区| 欧美内射少妇| 中文字幕乱码人妻二区三区| 绯色AV粉色AV蜜臀AV| 伦激情人妻另类人妻| 久久超碰大香蕉| 日韩Va亚洲va欧美Ⅴa久久| 久久草视频污视频| 欧美系列在线一区二区| 99精品无码| 加勒比大香蕉视频在线| 在线97视频| 吉田爱美AV在线| 中文字幕中文字幕一区二区| 国产后入内射| 久久久成人国产精品无码| 欧美肥臀在线| 翘臀vidoes| 中文字幕一区二区三区四区在线视频| 久久超碰98| 亚洲AV无码国产成人| 中文字幕在线免费观看 | 视频一区二区三区精品| 老女人老91妇女老热女| 黄片www.| 亚洲精品久久久久久久蜜桃臀| 人人澡人人爽人人精品| 午夜超爽| 大香蕉2017| 色一射色一射| 在线国产福利网址导航| 97se亚洲| 草伊人高潮喷水超碰| 2019天天干天天操| 婷婷激情四射| 一区二区三区无卡视频在线观看| 日韩av影片在线观看| 亚洲动态色图| 国产久久日| 欧美日韩丝袜| 国产精品久久久久久久黄无码| 欧美热图99| 夜夜嗷嗷一区二区| 九九AV| 狠狠操夜夜| 欧美AB在线| 91nbbbbbb| 粉嫩国产精品久久粉嫩| 国产精品极品美女视频| 九九九九9999| 亚洲s色图| 成人色女网| 97人妻碰碰中文无码久热丝袜| 操婢日韩| 97色色色| 偷拍欧美亚洲| 9999亚洲精品| 欧美日韩m| 中文久久爆乳| 亚洲国产精品9999在线观看| 亚洲Av诱惑| 亚洲日本天堂| 北京美女一区二区| 欧美亚洲综合色| 国产精品自拍欧美在线| 国模无码人体一区二区三| 亚洲少妇视频| 欧美一级专区免费大片| 内射中出日韩在线观看视频| 97人人射| 欧美成人黄网色网站| 精品无码久久久久久国产浪潮| 欧美性性性| 色天天野狼综合社区| 欧美夜夜骑视频| 久久超碰、| 俺去久久| 日韩免费人妻色情网站| 99久久99九九99九九九| 国产女人操逼视频| 影音先锋视频在线| 内射小黄片| 91精品人| 欧美在线91| 亚洲天堂男人网| 噜噜噜噜久久久精品免费| 人妻色情天天操| 蜜臀一二三区| 国产精品一级二级在线| 极品后入免费视频| 国产精品久久久久久久久久久久久久久久久久| 殴美牲| 丝袜夫妻自拍| 久都青青视频| 久久国色天香香蕉| 草b在线| 在线 亚洲 网爆 自拍| 精品一区96| 91在线视频免费中出| 北京专精特新企业招聘信息| 97二区四区| 用力操死我| 妇女视频网站| 日日夜夜草草草| 涩涩久久精品| 人妻喷水| 久久精品无码专区| 性色亚洲| 日韩偷拍一区二区三区 | 60秒试看最爽10分钟网站| 啊啊好多水| 亚洲高清少妇| 午夜操一视频一区| 亚洲欧美色图片| 操国产逼| www..com操老师| 亚洲成A∨人影院在线欢看| 强奸a片网| 久操大香蕉手机视频在线看 | 午夜久久久| 96国产精品| 男人午夜天堂| 黄色片一区二区三区四区五区| 国产人妖视频一区在线观看| 国产精品香蕉热久久新品| www.色综合| www老逼91| A男人的天堂| 91日韩网站| 老司机午夜精品视频| 国产女人高潮嗷嗷嗷叫小说| 日本操BAV| 欧美乱色| 欧美性综合| 超碰97丝袜| se01国产在线视频| 色婷视频| 2019天天操天天爽天天拍| 久久精品高清无码一区| 亚洲国产熟妇综合色专区| 99老司机精品视频在线观看| 欧亚免费视频| 久草精品国产蜜臀| 夜夜嗨一区| 九九九精品成人免费视频小说| 久久精品中文字幕无码l| 天天摸,夜夜摸| 天操老女人| 东京热天堂网| 人人摸人人叼| 国产精品乱码久久久久久久久久久久| 亚洲高清男人天堂| 国产成人亚洲精品无码最新在线| 午夜精品探花| 欧美 青青草| rion磁力链接| 无码天天操| 国产亚洲 中文欧美久久| 国产精品一级二级在线| 精品久久久久久中文字幕视频免费| 欧美日韩一区二区三区四区蜜桃| 日本久操视频| 日日日日做夜夜夜夜做无码97| 性色AV网站| 色色五月婷婷| av久日| 精品久久无码午夜福利| 亚洲 日本 一 二 三| 曰韩少妇无码| 亚洲精品免费中文字幕| 五月天激情国产综合婷婷婷| 91成人久久| 天天懆天天日| 91啪9色| 啊啊啊久久| 小情侣高清国产在线视频| 日韩久久艹| 男女一进一出视频久久| 丁香九月婷婷| 亚洲天堂一二| 极品美女福利在线观看| 欧美中字二区| 日韩一级性爱无码| 亚洲最大91网| 成人性交免费视屏| 不卡免费av在线播放| 欧美大片天天看| 影音先锋乱伦资源| 日少妇亚洲版| 无码精品久久久久久亚洲| 婷婷久草一区二区三区| 91中出视频| 国产福利第一视频| 国产欧美日产一区二区三区 - 国产欧美日 | 污色区网站| 日韩另类色图| 精品一区二区三区麻豆| 狠狠狠狠狠| 亚洲激情视频| 色噜噜综合在线| 超碰97护士| 久久久久久久久久久97| 东北少妇高潮zzzz| 激情图片伦理国产一区二区日韩| 国产综合日韩伦理| 亚洲乱色视频一区、二区在线| 女人天堂av在线播放| 裸体女人草逼视频播放一区,二区,三区,四区,五区 | 在线观看黄色电话| 狠狠躁久久躁| 啊灬啊灬啊灬好深灬快高潮了动漫-国产字幕国产在线观看-B049AV | 男人的天堂com| 日韩啪啪啪啪啪| 男啪女色黄无遮挡免费观看| 久久久工口| 国产91av在线播放| 欧美传媒一区| 美女黄频a美女大全免费皮| 亚洲精品蜜桃久久久| 五月天偷拍| 大香蕉一级黄色片久久| 亚洲永久AV无码精品秋霞| 超碰国产精品无码| 色综合超碰超| 日本九九九九| yiqicaoav| 久久婷婷亚洲欧| 日韩性爱网址| 超碰色综合| 秋霞一区二区三区四区五区六区七区| 乱伦AVxx| 男人久久天堂| 日本不卡二三区| 亚洲操逼视频网站| 综合网天天| 大香蕉欧美国产日韩高潮| 亚洲操逼视频网站| 天天伊人| 97频视在线| www.夜夜操| 亚欧毛片基地国产毛片基地| 亚洲男人天堂视频| 亚洲色图91欧美日韩| 久久久久久一日韩字幕无码| 俺去啦自拍| 中文字幕丝袜美腿| 强奸乱亚洲| 国产高清视频无码在线| 天天影视之亚洲综合网| 婷婷三区| 91精品丝袜在线观看| 欧美色www亚洲国产阿娇要播| 97国产精品久久久久| 荡小穴在线观看| 九月丁香综合网| 国产强奸乱伦第1页| 蜜桃精品视频一区二区三区| 欧美另类色| 强奸乱伦αv片| 国产精品无码成人精品| 欧美综色欧| 日韩精品作爱导航| 97在线免费看| 天天做日日爱夜夜爽| 久久久一区二区三区三州| 欧美宗合网| 97超碰超欧美。| 麻豆AV一区二区| 在线不卡视频| 韩国黄片aaaa| 婷婷干黄色| 91色花堂| 色网亚洲人| 超碰97首页| 国产AV天美| 另类综合另类| 丁香五月激情综合| 丝袜熟女一区二区三区| 男女猛烈无遮掩视频免费软件| 天天综合色图| 久久一二三四五六七八九区| 午夜毛片高清免费不卡| 一区二区三区网站日日骚| 爱射综合| 国产精品一区二区黄片| 嗯啊抽插大香蕉网页| 国产成年女人免费视频播放a| 白丝AV| 97综合在线| 国产精品一区二区三| 午夜美女诱惑电源网| 欧美激情一| 好吊爽好吊爽在线视频,中文字幕精品一区二区日本,国产良妇出轨视频在线观看, | 岛园激情| 午夜福利免费精品视频| 亚洲图片婷婷五月天| 性爱综合一区二区| 久久亚洲AV无码白度| 久久精品熟妇丰满人妻99| 青青草公开在线免费不卡视频| 国产中午字一暮区| 亚洲熟妇综合久久久久久| 亚洲国产青青| 粉嫩久久久久| 久湿久久| 爱妻综合网| 四虎影视永久在线观看精品免费网站| 都市激情人妻一区二区青青操视频| 屌妞视频久久久久久久久久久久| 黄网站黄视频网站进入口| 96AV久久久| 国模不卡一本二本三电影| 日韩三级在线观看mp4| 曰本91情色| 中文字幕第23区| 97超级色碰碰| 久9久9久9久9久9久9| 久久久天堂| 97精| 三级精品三级在线观看| 日韩av不卡在线看|