小编Vij*_*jay的帖子

在这种情况下是否需要屏蔽?

在下面的代码中是赋值所需的掩码.

unsigned int x = 0x01020304;
unsigned char a1, a2, a3, a4;

a1 = (x >> 24) & 0xff;
a2 = (x >> 16) & 0xff;
a3 = (x >> 8) & 0xff;
a4 = x & 0xff ;
Run Code Online (Sandbox Code Playgroud)

我确实意识到它没有它可以正常工作,但我在所有标准/已审查的代码中找到了这些分配......是不是浪费了周期?

感谢您对上述代码的回复,似乎编译器忽略(优化)了掩码,如下面的objdump所示.

a1 = (x >> 24) & 0xff;

804838b:    8b 45 fc                mov    0xfffffffc(%ebp),%eax
804838e:    c1 e8 18                shr    $0x18,%eax
8048391:    88 45 fb                mov    %al,0xfffffffb(%ebp)
Run Code Online (Sandbox Code Playgroud)

c optimization masking

5
推荐指数
1
解决办法
144
查看次数

通过其地址访问C中的位字段

不允许使用其地址访问C中的位字段的原因是什么,是因为它可能不是一个非系统字对齐的地址..?或者因为在一个字节内得到位的地址没有意义......?(因为这种类型的指针运算会很尴尬吗?)

c pointers bit-fields

2
推荐指数
1
解决办法
6958
查看次数

标签 统计

c ×2

bit-fields ×1

masking ×1

optimization ×1

pointers ×1