看板 Math 關於我們 聯絡資訊
※ 引述《ephraim13825 (好喔)》之銘言: : https://i.imgur.com/u0XoCBC.jpg
: 課堂上讓大家思考的邏輯題 : 想了很久都沒有頭緒 請問有板上高手可以出來解答一下嗎 拜託大家了 (Y-1980, 7bit)(M, 4bit)(D, 5bit) 的 16-bit 數字以 Little Endian 表示 3D 50 => 0x503D => 0101 0000 0011 1101 => 0101000 0001 11101 => 40 1 29 4E 4B => 0x4B4E => 0100 1011 0100 1110 => 0100101 1010 01110 => 37 10 14 以下類推 欲求的 2019/05/07 表為 39 5 7 => 0100111 0101 00111 => 0100 1110 1010 0111 => 0x4EA7 => A7 4E ==== 我的思考過程是這樣的: (1) 首先這兩 byte 數字如果照 Big Endian 表示, 中間的 4Exx 應該對應只差幾天 但實際上相似的反而竟然是月日, 年差很多, 因此考慮 Little Endian 表示 (2) 考慮之後可以看到若依 Little Endian 表示解讀則兩邊都是遞增了 (3) 第二個線索還是 4E 這一塊, 看到尾部只有 10/14 和 2/14 兩組 再加上 0xE = 14, 可以猜測低位可能直接表日數 而月數應該是分開表示而不是連續 (指一月最後一日和次月一日數字不連續) (4) 考慮到日數可以到 31, 可用 5 個 bit 表示 逐一檢查可以發現這些數字的低 5 bit 正好是日數 (5) 月的部份有一個很明顯的提示: 4E 37 是 10/14, 而 4E 38 是隔年 2/14 (4E 19 和 4E 20 是用十六進位唬你的 XD 因為十六進位 0x19 和 0x20 差 7) 再思考到月可以到 12 之後就可以發現月的 4 bit 是接著剛才的 5 bit 往高位走 (6) 最後剩下的 7 bit, 把它寫出來之後就可以發現到正好是西元年減 1980 這樣就解出這個格式了 ==== 然後因為這個格式超級眼熟 照印象 google 了一下之後確定沒錯: 它是 FAT16 磁碟格式裡表示檔案建立/修改時間的日期部份的格式 其能表示的日期範圍是 1980/1/1 至 2107/12/31 -- 'Oh, Harry, don't you see?' Hermione breathed. 'If she could have done one thing to make absolutely sure that every single person in this school will read your interview, it was banning it!' ---'Harry Potter and the order of the phoenix', P513 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 180.177.3.123 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Math/M.1572040876.A.E89.html
ephraim13825: 感謝大大 我完全想不到 完全卡在月份這 10/26 11:39