Tag: 二进制补码

按位不算操作符

为什么按位操作(~0); 打印-1? 在二进制中,不是0应该是1。 为什么?

为什么-3 ==〜2在C#

无法理解。 为什么产量是“平等的” 码: if (-3 == ~2) Console.WriteLine("equal"); else Console.WriteLine("not equal"); 输出: equal

从int到float并返回时签名发生变化

考虑下面的代码,这是我的实际问题的SSCCE : #include <iostream> int roundtrip(int x) { return int(float(x)); } int main() { int a = 2147483583; int b = 2147483584; std::cout << a << " -> " << roundtrip(a) << '\n'; std::cout << b << " -> " << roundtrip(b) << '\n'; } 我电脑上的输出(Xubuntu 12.04.3 LTS)是: 2147483583 -> 2147483520 2147483584 -> -2147483648 请注意,在往返之后,正数b如何结束的。 […]

memset如何用-1来初始化一个整型数组?

关于memset的manpage说: #include <string.h> void *memset(void *s, int c, size_t n) memset()函数用常量字节c填充s指向的内存区域的前n 个字节。 很明显memset不能用来初始化int数组,如下所示: int a[10]; memset(a, 1, sizeof(a)); 这是因为int是由4个字节(比如说)表示,并且不能获得数组a整数的期望值。 但我经常看到程序员使用memset将int数组元素设置为0或-1 。 int a[10]; int b[10]; memset(a, 0, sizeof(a)); memset(b, -1, sizeof(b)); 根据我的理解,使用整数0初始化是可以的,因为0可以用1个字节表示(可能在这种情况下我错了)。 但是如何用-1 (一个4字节的值)来初始化b ?

为什么 – ( – 2147483648)= – 2147483648在32位机器中?

我认为这个问题是自我解释的,我想这可能与溢出有关,但我还是不太明白。 发生了什么,在隐藏之下呢? 为什么-(-2147483648) = -2147483648 (至less在编译C时)?

〜x +〜y ==〜(x + y)总是假的?

这个代码总是评估为false? 这两个variables都是两个补码signed int。 ~x + ~y == ~(x + y) 我觉得应该有一些符合条件的数字。 我试图testing-5000到5000之间的数字,但从来没有达到平等。 有没有办法build立一个方程来find解决scheme的条件? 将另一个replace为我的程序中的一个隐藏的错误?

为什么Integer.MAX_VALUE + 1 == Integer.MIN_VALUE?

System.out.println(Integer.MAX_VALUE + 1 == Integer.MIN_VALUE); 是真的。 我知道在Java中的整数是32位,不能超过2 ^ 31-1,但我不明白为什么加1到MAX_VALUE结果在MIN_VALUE而不是某种exception。 没有提到像透明转换到更大的types,就像Ruby一样。 这种行为指定的地方? 我可以依靠吗?

为什么在x86(-64)上有符号和无符号乘法不同的指令?

我认为2的补充的全部意义在于可以以相同的方式对有符号和无符号数字执行操作。 维基百科甚至专门列出乘法作为有益的操作之一 。 那么为什么x86对每个mul和imul都有单独的指示? 这对于x86-64还是这样吗?

为什么更喜欢两个补码超过符号和数量签名的数字?

我只是好奇,如果有一个原因,为了在二进制表示-1,二进制补码使用:翻转的位和加1? -1表示为11111111(二进制补码),而不是(对我来说比较直观)10000001是二进制1,第一位是负数标志。 免责声明:我的工作不依赖二进制算术!

使用-1作为unsigned(size_t)types的标志值

我使用-1作为返回types为size_t(无符号types)的函数的标志值。 我一开始并没有注意到,特别是因为它没有在我的代码中造成任何错误(我用x == -1来检查它,而不是x <0)。 有没有什么微妙的原因,我不应该离开它? 什么时候这可能会出乎意料? 这是常用的吗? ptrdiff_t不太常见,需要更长的时间才能完成,反正它不是真正合适的types,因为函数返回一个数组中的索引。