如果有int类型的数量,并且值为5,则计算机将显示以下内容:
00000000 00000000 00000000 00000101
如果将5转换为二进制数,则为101,但int类型的数量占4字节(32位),因此前面填充了0堆。
我现在想知道,-5在计算机上是怎么显示的?
在计算机中,负数表示为正值的补数。
什么是补充代码? 这必须从原始代码,反码开始。
原码:以绝对值大小转换的二进制数,是一个称为原码的整数。
例如,00000000000000000000000000000000000000000000000001是5的原码。
反码:按位反取二进制数,得到的新二进制数称为原二进制反码。
逆操作是指原来为1,变为0。 原来是0,得到了1。 (1变0; 0变1 ) ) )。
例如,逐位反转,000000000000000000000000000000000000000000000000001,从而产生1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
(1111111111111111111111111111111111111111010是00000000000000000000000001的反码。
因为反码是相互的,所以也可以说如下。
1111111111111111111111111111111111111111111111100000000000000000000000000001相互为反码。
补数:反符号加1称为补数。
也就是说,要得到一个数的补数,首先要得到解码,然后在解码上加1,得到的数称为补数。
例如,00000000000000000000000000000000000000000000000000000001的反码是111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
那么,补码如下。
1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
因此,-5在计算机中表示为11111111111111111111111111111111111111111111111111111111111111111111111111。 十六进制:转换为0xFFFFFFFB。
再举一个例子,看看整数-1在计算机上是如何表示的。
如果这也是int类型,则如下所示。
1、先取1的源代码: 000000000000000000000000000000000000000000000000000000000001
2、得到反码: 111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
3、补码: 111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
-1在计算机上用二进制表示的话,就知道是全1。 十六进制是0 xfffffpackagecom.Sohu.hot.vis.servlet;
//*
*请进行位移测试
*
*@authorliweihan
*@time2017-05-0510:33
*/
公共类测试{
//*
java有三种类型的移位运算符
相当于:右移位运算符、num1、num除以2后的值
:无符号右移,忽略符号位,空位全部用0填充
*/
publicstaticvoidmain (字符串[ ] args ) {
intnumber=10;
printnownum(number );
到左(编号,1 );
toright(number,1 );
intnumber2=-10;
printnownum(number2;
到左(编号2,1 );
o right (编号2,1 );
intnumber3=3;
printnownum(number3;
to left (编号3,1 );
o right (编号3,1 );
intnumber4=-3;
printnownum(number4;
to left (编号4,1;
o right (编号4,1 );
}
//*
*@authorliweihan
*@time2017/5/511:05
* @说明打印当前数字
*@paramnumber
*/
私有语音打印机nownum (int number ) {
system.out.println ((=========================() ) ) ) )
//原始二进制文件
打印info (number;
system.out.println (' now number : ' number );
}
//*
*@authorliweihan
*@time2017/5/510:48
*@description向左移动offset位
*@paramnumber原始数值
*@paramoffset左移位数
*/
隐私声明工具(int number,intoffset ) {
//向左移动一位
number=number
打印info (number;
system.out.println (' now number : ' number );
}
//*
*@authorliweihan
*@time2017/5/510:50
* @向右移动描述偏移位
*@paramnumber原始数值
*@paramoffset右移位数
*/
隐私声明(int number,intoffset ) {
//向右偏移一位
number=numberoffset;
打印info (number;
system.out.println (' now number : ' number );
}
//*
*@authorliweihan
*@time2017/5/510:34
* @说明打印int的二进制数
*@paramnum进制
*/
私有语音打印机(intnum )。
系统. out.println (integer.tobinarystring (num );
}
//*
*@authorliweihan
*@time2017/5/510:42
* @描述二进制文件转换为十进制文件
*@parambinaryString二进制文件
*/
私有语音打印机(stringbinarystring ) {
system.out.println (integer.parseint (二进制字符串,2 ) );
}
}
结果:==========================
1010
NowNumber:10
10100
NowNumber:20
101
NowNumber:5
==========================
11111111111111111111111111110110
新编号:-10
11111111111111111111111111101100
新编号:-20
11111111111111111111111111111011
NowNumber:-5
==========================
11
NowNumber:3
110
NowNumber:6
1
NowNumber:1
==========================
11111111111111111111111111111101
NowNumber:-3
11111111111111111111111111111010
NowNumber:-6
11111111111111111111111111111110
NowNumber:-2
Processfinishedwithexitcode0
以下两篇文章值得参考: