小编Mar*_*tin的帖子

((a +(b&255))&255)是否与((a + b)&255)相同?

我正在浏览一些C++代码,发现这样的东西:

(a + (b & 255)) & 255
Run Code Online (Sandbox Code Playgroud)

双重和我生气,所以我想到:

(a + b) & 255
Run Code Online (Sandbox Code Playgroud)

(a并且b是32位无符号整数)

我很快写了一个测试脚本(JS)来证实我的理论:

for (var i = 0; i < 100; i++) {
    var a = Math.ceil(Math.random() * 0xFFFF),
        b = Math.ceil(Math.random() * 0xFFFF);

    var expr1 = (a + (b & 255)) & 255,
        expr2 = (a + b) & 255;

    if (expr1 != expr2) {
        console.log("Numbers " + a + " and " + b + " mismatch!");
        break;
    }
}
Run Code Online (Sandbox Code Playgroud)

虽然剧本证实了我的假设(两个操作都是平等的),但我仍然不相信它,因为1) …

c++ binary logic

92
推荐指数
6
解决办法
7665
查看次数

在内存中引用数组

我有这种内存布局:

0018FBD2 ?? ?? ?? ??    ?? ?? ?? ??
0018FBDA AA AA AA AA    BB BB BB BB  <- stuff I'm interested in
0018FBE2 ?? ?? ?? ??    ?? ?? ?? ??
Run Code Online (Sandbox Code Playgroud)

在C中,我会这样做:

int* my_array = (int*) 0x18FBDA;
my_array[0]; // access
Run Code Online (Sandbox Code Playgroud)

但是,我正在使用C++,我想声明一个引用:

int (&my_array)[2] = (???) 0x18FBDA;
Run Code Online (Sandbox Code Playgroud)

为了这样使用:

my_array[0]; // access
Run Code Online (Sandbox Code Playgroud)

但正如你所看到的,我不知道如何施展它:

int (&my_array)[2] = (???) 0x18FBDA;
Run Code Online (Sandbox Code Playgroud)

我该怎么做?它甚至可能吗?

c++

4
推荐指数
1
解决办法
125
查看次数

标签 统计

c++ ×2

binary ×1

logic ×1