相关疑难解决方法(0)

120
推荐指数
7
解决办法
22万
查看次数

Java:对负数进行右移

关于负数的右移操作我很困惑,这里是代码.

int n = -15;
System.out.println(Integer.toBinaryString(n));
int mask = n >> 31;
System.out.println(Integer.toBinaryString(mask));
Run Code Online (Sandbox Code Playgroud)

结果是:

11111111111111111111111111110001
11111111111111111111111111111111
Run Code Online (Sandbox Code Playgroud)

为什么要将负数移31而不是1(符号位)?

java bit-manipulation bit-shift bitwise-operators negative-number

24
推荐指数
2
解决办法
3万
查看次数

C中〜0的值是多少?

我想要得到的价值INT_MININT_MAX,和我试过~0~0 >> 1,因为最左边的位为符号位.我得到了他们两个-1.

它太混乱了,为什么不~0成为0xffffffff~0 >> 1将来0x7fffffff

c bit-manipulation

9
推荐指数
1
解决办法
3285
查看次数

使用按位移位操作进行符号扩展

问答后,我试着检查答案,所以我写道:

#include <stdio.h>

int main ()
{

        int t;int i;
        for (i=120;i<140;i++){
                t = (i - 128) >> 31;
                printf ("t = %X , i-128 = %X ,  ~t & i = %X , ~t = %X \n", t, i-128 , (~t &i), ~t);
        }

        return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出是:

t = FFFFFFFF , i-128 = FFFFFFF8 ,  ~t & i = 0 , ~t = 0 
t = FFFFFFFF , i-128 = FFFFFFF9 ,  ~t & i = …
Run Code Online (Sandbox Code Playgroud)

c c++ bit-manipulation

5
推荐指数
2
解决办法
5312
查看次数

'(无符号)1'和'(无符号)〜0'之间的区别

(unsigned)~0和之间有什么区别(unsigned)1.为什么是unsigned~0IS -1unsigned11?它是否与无符号数存储在内存中的方式有​​关.为什么无符号数字会给出签名结果.它也没有给出任何溢出错误.我正在使用 GCC编译器:

#include<sdio.h>
main()
{
 unsigned int x=(unsigned)~0; 
 unsigned int y=(unsigned)1; 
 printf("%d\n",x); //prints -1
 printf("%d\n",y); //prints 1
}
Run Code Online (Sandbox Code Playgroud)

c operators bitwise-operators

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