aln*_*net 3 c 64-bit bit-manipulation
我有以下示例代码:
uint64_t x, y;
x = ~(0xF<<24);
y = ~(0xFF<<24);
Run Code Online (Sandbox Code Playgroud)
结果将是:
x=0xfffffffff0ffffff
y=0xfffff
Run Code Online (Sandbox Code Playgroud)
有人可以解释这个区别吗?为什么x计算超过64位而y只计算在32位?
默认操作是32位.
x=~(0xf<<24);
Run Code Online (Sandbox Code Playgroud)
此代码可以反汇编为以下步骤:
int32_t a;
a=0x0000000f;
a<<=24; // a=0x0f000000;
a=~a; // a=0xf0ffffff;
x=(uint64_t)a; // x = 0xfffffffff0ffffff;
Run Code Online (Sandbox Code Playgroud)
和,
y = ~(0xFF<<24);
int32_t a;
a=0x000000ff;
a<<=24; // a=0xff000000;
a=~a; // a=0x00ffffff;
x=(uint64_t)a; // x = 0x000000000ffffff;
Run Code Online (Sandbox Code Playgroud)