按位和负整数不同于按位和正整数

bitwise and on negative integer is different from bitwise and on positive integer

我找到了几个关于负整数按位运算的帖子,我发现一个很有帮助,它说负整数按位运算与正整数相同,但是当我测试-4和-5时在3种不同的语言中(C++,Object(FPC)-Pascal,和Dlang)他们都输出-8,同时4和5是4,为什么不同?

虽然大多数语言不需要(C 和 C++ 以及 Pascal 绝对不需要;我不知道 D)基本上所有现代计算机都使用 two's complement 作为整数。

  ..0 0100 = positive 4  
& ..0 0101 = positive 5  
= ..0 0100 = positive 4

  ..1 1100 = negative 4  
& ..1 1011 = negative 5  
= ..1 1000 = negative 8