Fre*_*red 0 c bit-manipulation
我正在开发一个发送 TCP 标头的程序(模拟 3 次握手)。我有一个变量,该变量包含数据偏移量(3 位)、保留值(4 位)和 9 个标志(9 位)。我正在使用按位运算来设置位。问题是如何打印每个位?
如何打印这 3 位?多变的:
u_int16_t reserved_ofs_flags;
Run Code Online (Sandbox Code Playgroud)
我发现这个问题类似,但答案只适用于最不重要的问题:如何打印一位?
要从从位置 开始的值中提取N位(从最低有效位开始计数),可以使用以下表达式:unsignedP0
unsigned x = (value >> P) & ((1U << (N - 1) << 1) - 1);
Run Code Online (Sandbox Code Playgroud)
笔记:
N是编译时常量,则((1U << (N - 1) << 1) - 1)在编译时计算表达式。N至少1和最多是类型中的位数unsigned。((1U << N) - 1)具有未定义的行为。NunsignedP是12并且N是3这样你可以写:unsigned x = (value >> 12) & 7;| 归档时间: |
|
| 查看次数: |
310 次 |
| 最近记录: |