⑴ java如何把 int型负数转换成 int型正数
将负数转化成正数的方法:
1、对已知是负数的数值转化方法:假设a为已知负数,则intb=-a;则b为所需正数;
2、对不确定正负性的数值转化方法:假设有a,正负不确定,则可用:intb=Math.abs(a);取绝对值的方式来将数值转化成正数。
(1)java负数移位扩展阅读:
整数(int类型的常量)有几种书写形式,程序中的整数一般采用十进制写法。用十进制方式写出的一个整数就是普通数字字符组成的一个连续序列,其中不能有空格、换行或其他字符。C语言规定十进制表示的数字不能是0,除非要写的整数本身就是0。下面是一些整数的列子。
⑵ 使用java里的位移运算符时右边输入负数,会怎么样
我们知道,java int 是32位,并且位运算要用补码,举个例子
那么在位移<<或者>>右边的值i要用补码,并且因为是32位的,所以右边位移i只取补码的后6位,
例如
2<<-1 因为-1的补码是 111111111111.....所以把有效的1移出32位界了,就变0了
2<<3 = 2<<67
3补码 0000....000011
67补码00000...1000011
他们都只移了三位
⑶ 为什么Java中负数无符号右移64位得到本身,无符号右移65位,会得到一个很大的数值
为什么Java中负数无符号右移64位得到本身,无符号右移65位,会得到一个很大
⑷ java中 >>> 有什么用怎么6>>>1和6>>1一样
对负数移位结果就不一样了。
>>>在移位负数时左边补0,所以就变正数了
>>在移位负数时左边补1,移动完还是负数
例如
-1000>>>2,-1000>>2是不同的。
>>>-1是不行的,会先取32的模,因此会右移动31位,所以肯定变0了
⑸ java移位运算问题:“-1>>1”和“-1>>>1”有何差别
>>这个是带符号右移。。。。
>>> 这个是无符号右移。。。。
-1的二进制反码表示为 11111111 11111111 11111111 11111111
-1>>1的结果是 : 1111111 1111111 11111111 1111111
-1>>>1的结果是: 01111111 11111111 1111111 11111111
无符号右移后前面补0,而带符号右移是补符号位,也就 是第一位,负数补1,正数补0
希望对你有帮助。。。。仍有问题可以HI我。。。
⑹ java做ip转int时,碰到如下代码,对移位运算部分不太理解
&0xFF是为了保留正数值。因为java的byte变量ipByte可能有负数值,经过<<位移产生负数结果,最后强制用&0xFF00等得到一个字节的正数值。所例算法不是很理想,ipByte中每个字节可以先&0xFF再位移...
⑺ Java移位运算符问题
有符号右移会保留最高位的符号位,从次高位开始逐位右移填0;而无符号右移会将符号位一起右移,并将高位全部填0。
例:对于一个byte类型的数10010100来说,有符号右移2位变为10000101,而无符号右移2位变为00100101。前者仍然是一个负数,而后者变成了正数。
左移只有有符号的,没有无符号左移。
⑻ Java问题 运行结果:(a=b)=10 (-24>>1)=-12 (-24>>>)=2147483636
这里给你介绍一下二进制问题。
int类型是四个字节,如int型的1的二进制就是:
00000000 00000000 00000000 00000001
-1是:
11111111 11111111 11111111 11111111
1+(-1)= ? 可以每一个位相加。得到结果是:
00000001 00000000 00000000 00000000 00000000
如果每个位手工相加得到的是五个字节的数,而int型是四个字节,越界了。
所以结果只取后面四个字节,即32位:
00000000 00000000 00000000 00000000 所表示的值就是0,
与实际1+(-1)=0相符。
如果让-1移位,即(-1)>>>1会是多少呢?
11111111 11111111 11111111 11111111 向右移移位得到:
01111111 11111111 11111111 11111111 这个数是int类型最大的数,
也就是Integer.MAX_VALUE的值。
所以通常负数移位都是大的正数。