了解补码知识点
要将补码转换为十进制,需要确定补码的符号位。如果补码的符号位为1,则表示为负数,否则表示为正数。
假设我们有一个补码为1 0110 1011 1100 1101 1000 0011 1101 1100
0010 1101 1111 1101 1100 0001 1100 0011 0100
首先,确定符号位。根据补码的规则,最高位的1表示负数,因此这个补码表示一个负数。
将除符号位外的其余位取反。得到反码:0 1001 0100 0011 0010 0111 1100 0010 0011
将反码转换为原码。对于负数,反码加1即可得到原码:0 1001 0100 0011 0010 0111 1100 0010 0100
将原码转换为十进制。根据原码的规则,最高位的1表示负数,因此这个原码表示一个负数。
将其余位转换为十进制,得到的结果为:-539222988。
因此,补码101101011110011011000001111011100转换为十进制为-539222988
先考虑如何将二进制补码转换为十进制整数:
若符号位是0, 则该数是正数, 原码等同于补码. 可以由原码(也就是补码)得知代表的正整数.
若符号为是1, 则该数一定是负数, 可按照以下方式转换:
方式一: 先把符号位去掉, 把剩下的非符号位取反后得到一个无符号位的二进制序列, 将该二进制序列转换为十进制整数(注意:无符号位二进制序列代表的一定是正数),
将该整数加1得到的数便是原补码代表的整数的绝对值. 如: a = 1011(补码), 011取反得到100, 100代表4, 4+1=5,
|a|=5, a=-5.
方式二: 利用公式: (-1)2^(n-1) + 非符号位代表整数 = 值. 如a =1011(补码), n = 4, 011代表3 a = -12^3 + 3 = -5.
long转换为int
在Java中,将Long类型转换为int类型时,会发生类型转换和内存表示的变化。下面是转换的内存分析:
原始的Long类型的值以二进制补码形式存储在内存中。补码是一种表示有符号整数的方法,其中最高位表示符号位,0表示正数,1表示负数。
当将Long类型的值转换为int类型时,首先将Long类型的值截断为32位,只保留低32位。
如果截断后的32位二进制表示的值在int类型的范围内,转换的结果就是该32位二进制值。
如果截断后的32位二进制表示的值超出了int类型的范围,将发生溢出。溢出时,只保留截断后的32位二进制值的低32位,丢弃高位。
如果截断后的32位二进制值的最高位为1,表示负数,转换结果为负数的二进制形式。
示例1:
Long longValue = 1234567890L;
int intValue = longValue.intValue();
在这个示例中,longValue的
二进制: 10 1101 1111 1101 1100 0001 1100 0011 0100
二进制补码:0010 1101 1111 1101 1100 0001 1100 0011 0100
将其截断为32位后:1101 1111 1101 1100 0001 1100 0011 0100 (补码)
根据补码的规则,最高位的1表示负数,因此这个补码表示一个负数。将除符号位外的其余位取反。
方式一
按位取反得到反码:1010 0000 0010 0011 1110 0011 1100 1011
加1 得到原码
1010 0000 0010 0011 1110 0011 1100 1100 去掉第一位转换为十进制数为 539 222 988
1表示负数
转换为int类型的结果为:-539 222 988
方式二
按位取反:1010 0000 0010 0011 1110 0011 1100 1011 其对应的十进制数为 539 222 987
加1 539 222 988 |a|=539 222 988, a=-539 222 988
-10 0000 0010 0011 1110 0011 1100 1100
转换为int类型的结果为:-539 222 988
示例2:
Long longValue = 6444823059L;
int intValue = longValue.intValue();
在这个示例中,longValue的二进制
二进制: 1 1000 0000 0010 0100 0011 0010 0001 0011
补码: 0001 1000 0000 0010 0100 0011 0010 0001 0011
将其截断为32位后:1000 0000 0010 0100 0011 0010 0001 0011
根据补码的规则,最高位的1表示负数,因此这个补码表示一个负数。将除符号位外的其余位取反。
方式一
按位取反得到反码:1111 1111 1101 1011 1100 1101 1110 1100
加1 得到原码
1111 1111 1101 1011 1100 1101 1110 1101 去掉第一位转换为十进制数为 2 145 111 533
1表示负数
转换为int类型的结果为:-2 145 111 533
方式二
按位取反:1111 1111 1101 1011 1100 1101 1110 1100
其对应的十进制数为 2 145 111 532
加1 2 145 111 533 |a|=2 145 111 533, a=-2 145 111 533
转换为int类型的结果为:-2 145 111 533
示例3:
Long longValue = 6191460207L;
int intValue = longValue.intValue();
在这个示例中,longValue的二进制
二进制: 1 0111 0001 0000 1010 0010 1111 0110 1111
补码: 0001 0111 0001 0000 1010 0010 1111 0110 1111
将其截断为32位后:0111 0001 0000 1010 0010 1111 0110 1111
根据补码的规则,最高位的0表示正数,因此这个补码表示一个正数,正数的补码就是原码本身
0111 0001 0000 1010 0010 1111 0110 1111
转换为int类型的结果为:1 896 492 911
二进制在线转换地址
http://binary-converter.bchrt.com/