我使用looked in this question来理解为什么在大多数语言中没有算术左移运算符。但是我们如何处理负整数呢,因为左移会丢弃它。以-2^5为例,结果应该是负的。
发布于 2012-08-23 19:51:28
不,符号位永远不会被左移位抛出,除非你提交一个溢出。原因?在二的补码编码中,负数的左侧全是1,而正数的左侧全是0。就像符号位被复制到右边一样。顺便说一下,这就是为什么术语“符号扩展”是有意义的,这也是Java中默认的右移位的工作方式。
int i = -1;
System.out.format("%3d = %s\n", i, Integer.toBinaryString(i));
i <<= 5;
System.out.format("%3d = %s\n", i, Integer.toBinaryString(i));打印
-1 = 11111111111111111111111111111111
-32 = 11111111111111111111111111100000发布于 2012-08-23 19:54:44
对于这个问题,我最好的答案就是在手术前后改变标志。这可能看起来太明显了,但事实是,当符号改变时,位会以一种特定的方式改变
https://stackoverflow.com/questions/12090831
复制相似问题