答案很简单,这取决于负数在计算机内存中的保存方式。
我想 1 << 7 的含义对你来说很明显。它等于 128。你的“-”号只是意味着你想改变结果的符号,所以最终的结果是 -128。
但是为什么你得到了一些不同的东西?这是答案:
通常有两种类型的变量:有符号和无符号。两种类型都保存在实际上不知道开始使用哪种类型的内存中。程序员知道存储了什么样的数字。
当您将变量声明为无符号时,它可以存储从 0 到 n 的值,其中 n 是某种类型变量的最大值。
当您使用有符号时,您可以在那里存储一个从定义的负值到某个定义的正值的值。
使用无符号变量时,计算is值非常简单。请考虑一个 8 位(1 字节)无符号变量的简单示例:
如前所述,最小值为 0,设置所有 8 位时最大值为 255。
对于有符号类型的变量,使用了一种特殊的格式:从 0 到 127 的数字以与无符号类型相同的方式保存。而 127 的值是 8 位变量的最大值。最小值为 -128,存储为 0b10000000 或 0x80。下一个是-127,保存为0b10000001或0x81等。最大的负数是 -1,保存为 0b11111111 或 0xFF。
所以如果你有一个字节值 0xff 它可以是:255(无符号时)或-1(有符号时)。此处用于有符号变量类型的符号称为 U2 - 请阅读此内容。
在您的特定情况下,您似乎有一个有符号(-128)值,该值被读取为无符号值。在您的情况下,使用了 32 位(4 字节)变量(可能(无符号)int),因此它看起来有点不同(结果更长),但您可能会看到一些相似之处:U2 中 -128 的最后两位数字无论使用多少位来存储值,系统都将始终为 0x80。