操作系统-day10-叠加处理

向下舍入 (把123以10为单位向下舍入即120)

  • 0x123456780x1000 为单位进行 向下舍入,得到的就应该是 0x12345000
  • 0x1000 为单位 向下舍入,即 把尾3位 变成 0
  • 如果想 把某位变为 0 ,只要进行 与运算
    • 0x12345 678 & 0xfffff 000 = 0x12345 000

向上舍入(把123以10为单位向上舍入即130)

  • 先 以10为单位 向下舍入,再做个加法(加1个单位)
    • \(123 \rightarrow 120 \rightarrow +10 \rightarrow 130\)
  • 0x123456780x1000 为单位进行 向上舍入,得到的就应该是 0x12346000
    • 0x12345 678 & 0xfffff 000 = 0x12345 000
    • 0x12345 000 + 0x1000 = 0x1234 6 000

BUG

  • 恰好是单位的倍数,上述不成立
    • 120 不管怎们舍入,都应该是 120
  • 先判断是不是倍数
if ((i & 0xfff) != 0) {              /* 取末3位,判断不为0,则继续 */
    i = (i & 0xfffff000) + 0x1000;
    }
else
    return i;
  

优化

  • 不做判断,直接一步到位
    • 不管是否倍数,先加一个 单位取反(~0x1000),再向下舍入
      • 0x12345 678 + 0x0 fff = 0x12346 987
      • 0x12346 987 & 0xfffff 000 = 0x12346 000
    • 用倍数验证
      • 0x12345 000 + 0x0 fff = 0x12345 fff
      • 0x12345 fff & 0xfffff 000 = 0x12345 000
posted on 2026-06-13 11:14  中年二班  阅读(5)  评论(0)    收藏  举报