CS 144: Introduction to Computer Networking, Fall 2020
https://cs144.github.io/My Repo
https://github.com/wine99/cs144-20fa
思否主页:https://segmentfault.com/u/wine99
Translating between 64-bit indexes and 32-bit seqnos
注意 wrapping_integers.hh 中的这三个方法:
inline int32_t operator-(WrappingInt32 a, WrappingInt32 b) {
return a.raw_value() - b.raw_value(); }
//! \brief The point `b` steps past `a`.
inline WrappingInt32 operator+(WrappingInt32 a, uint32_t b) {
return WrappingInt32{
a.raw_value() + b}; }
//! \brief The point `b` steps before `a`.
inline WrappingInt32 operator-(WrappingInt32 a, uint32_t b) {
return a + -b; }
下面的两个加减,分别是在 WrappingInt32 上加上或减去一个 uint32_t,得到的结果仍然是一个 WrappingInt32,其意义是分别为把 a 这个 WrappingInt32 向前或向后移动 |b| 个单位距离。
而第一个减法重载,是两个 WrappingInt32 相减,得到的是一个 int32_t,要想理解其意义,首先要弄懂下面的代码:
// 2 ^ 32 = 4294967296
ui