2026-09-19
pack_bytes.rs
fn pack_bytes(hi: u8, lo: u8) -> u16 {
// write this: pack hi into the upper byte and lo into the lower byte
// of a u16, using `as` casts and `<<`
}
hiを上位バイト、loを下位バイトとしてu16に詰めるpack_bytesを、asキャストと<<を使って実装してください。
Reference
fn pack_bytes(hi: u8, lo: u8) -> u16 {
(hi as u16) << 8 | lo as u16
}
hi as u16 << 8のように括弧を省くと、そもそもコンパイルが通りません。Rustの構文解析は<を総称引数(ジェネリクス、いわゆるturbofishまわり)の開始とも解釈できるため、型名の直後に<<が続くと「u16への総称引数リストの開始」という読み方が優先され、シフト演算として扱われません。(hi as u16)と括弧で先にキャストを確定させてから<< 8を書けば、この曖昧さは起きません。一方lo as u16の方は後ろに<<が続かないので、括弧なしでも問題なく書けます。これは参考実装であり、唯一の正解ではありません。