1p3a-logo1p3a-logo
留学申请面试经验绿卡排期全民竞猜
APP
    旧版通行证登录注册APP
首页
热榜快讯
NEW
通知私信收藏阅帖历史积分中心
热门功能
💎每日夺宝🌱每日农场🐱领养宠物🛍️跳蚤市场🏠租房找室友🛒好物折扣💳信用卡助手📱旧机回收比价
我的版块
我的标签

[面经] Meta Coding:32 位整数按字节翻转(热身题)高频题

冷目灼灼的扁豆
2026/10/19 · 发布于刷题版·267
[面经] Meta Coding:32 位整数按字节翻转(热身题)
最近面了 Meta,分享一下 coding 轮的题目。这是热身题。
题目
实现 uint32_t byte_swap(uint32_t word),把一个 32 位整数的字节顺序翻转:
  • byte_swap(0x11223344) == 0x44332211
  • byte_swap(0x12345678) == 0x78563412
  • byte_swap(0x01020304) == 0x04030201
这道题真正考什么
题目本身不难,真正考的是位操作熟不熟。掩码和移位用得顺手的话,这就是一行代码的事;不顺手,就得有个 plan B,一个字节一个字节地拼,而不是同时摆弄四个掩码。
方法 A:逐字节循环(保底版)
每次取最低字节,拼到结果后面,两个数一起移位,重复 4 次:
uint32_t byte_swap(uint32_t word) {
uint32_t result = 0;
for (int i = 0; i < 4; i++) {
result = (result << 8) | (word & 0xFFu);
word >>= 8;
}
return result;
}

拿 0x11223344 走一遍:结果依次是 0x44、0x4433、0x443322、0x44332211。答案一样,只是思路是"一次处理一个字节",不需要任何位操作灵感。
方法 B:掩码移位(优化版)
4 个字节各自一步到位,直接移到镜像位置:最低字节去最高位,次低字节去次高位,反过来也一样。
uint32_t byte_swap(uint32_t word) {
return ((word & 0x000000FFu) << 24)
| ((word & 0x0000FF00u) << 8)
| ((word & 0x00FF0000u) >> 8)
| ((word & 0xFF000000u) >> 24);
}

这是应该瞄准的版本,但前提是位操作已经练成本能,不然现场压力下很容易写错。
易错点
  1. 先掩码再移位,顺序反了比特会串到相邻字节里。
  2. 字面量加 u 后缀:0xFF000000 在有符号 32 位里是负数,对有符号负数右移是实现定义行为,别踩。
  3. 常见追问是 64 位版本:同样的掩码思路扩展,或者直接用 builtin(__builtin_bswap32 / __builtin_bswap64)。
有问题欢迎讨论。
2
共1条回复

✨ 您正在体验新版论坛UI

👉 【有奖公测】反馈问题或建议

新手指南常见Q&A小黑屋关于我们加入团队联系客服VIP通行证购买鳄梨去广告企业招聘地里专栏商务洽谈服务条款社区守则隐私政策
youtubetwitter
1Point3Acres.com does not represent or guarantee the truthfulness, accuracy, or reliability of any of communications posted by users.
Copyright ©2009-2026 1Point3Acres.com All rights reserved. See Terms of Service.