‘壹’ java中二进制是用补码表示的,如果要转化为整数,是不是先要将补码转化为源码,然后再求真值
不需要,你只需要调用库函数(类库)就可以了,系统会自动识别补码,自动正常转化。
‘贰’ 原码与补码的转换
1、首先要知道,换算规则:原码转换为反码:符号位不变,数值位分别“按位取反” 。
‘叁’ 计算机的原码,反码,补码是怎么回事可以举例说明吗
计算机的原码,反码,补码是怎么回事?
可以举例说明吗?
计算机中,并没有原码和反码。
补码是怎么回事?
这得从“补数”谈起。
计算机所计算的位数,是固定的,如八位机。。。
位数限定之后,就可以用“补数”代替负数,用加法实现减法运算。
如两位十进制,-1,就可以用 +99 代替。
25 - 1 = 24
25 + 99 = (一百) 24
舍弃进位,只取两位,这两种算法功能就是相同的。
99,就是-1 的补数。计算公式:补数 = 一百+负数。
一百,是两位十进制数的计数周期。
-------------------------
计算机用二进制,补数,就改称为:补码。
八位二进制:0000 0000 ~ 1111 1111 (十进制 255)。
计数周期是:2^8 = 256。
所以,-1 补码就是 256 + (-1) = 255 = 1111 1111(二进制)。
用不存在的“原码反码取反加一”来求,也是这个结果。
求负数补码的计算公式: 周期 + 该负数。
正数,不用转换。也可以说,正数自身就是补码。
-------------------------
可以举例说明吗?
例如: 7-3 = 4。
用补码的计算过程如下:
7 的补码=0000 0111
-3的补码=1111 1101
--相加-------------
得(1) 0000 0100 = 4 的补码
舍弃进位,只保留八位作为结果,这就实现了 7-3。
‘肆’ 补码如何变成原码
已知一个数的补码,求原码的操作分两种情况:
(1)如果补码的符号位为“0”,表示是一个正数,所以补码就是该数的原码。
(2)如果补码的符号位为“1”,表示是一个负数,求原码的操作可以是:符号位为1,其余各位取反,然后再整个数加1。
例如,已知一个补码为11111001,则原码是10000111(-7):因为符号位为“1”,表示是一个负数,所以该位不变,仍为 “1”;其余7位1111001取反后为0000110;再加1,所以是10000111。
(4)补码转源码转换器扩展阅读:
总结:
已知一个数的补码,求原码的操作其实就是对该补码再求补码。
补码转换为原码:符号位不变,数值位按位取反,末位再加1。即补码的补码等于原码。
正整数的原码、反码和补码是一样的,即看到符号位(第一位)是0,就可以照着写出其他两种码。所以已知正数的补码,求其原码,两个数是一样的。
‘伍’ 补码转换成源码
负数:原码=补码各位取反+1 (这里所进行的取反操作是针对符号位之外的其他位,也就是说,不应该对符号位取反,如果你这么做了,将得不到预期的结果)
正数:原码=补码
‘陆’ 原码、补码、反码之间是怎样转换的
正数的原码、反码、补码是一致的。(例如:2的原码:0000 0010,那么其反码和补码都是0000 0010)
负数的反码顾名思义,是除了符号位与原码一致,其余位都与原码相反。(例如:-2的原码是1000 0010,那么其反码是1111 1101),负数的补码则是在其反码的基础上加1。(例如:-2的反码是1111 1110)
1、首先,数字除了我们平时最长使用的十进制数外,还有二进制,八进制,十六进制等。这里我们的原码,补码,反码之间转换指的是二进制数。如下。
‘柒’ 补码怎么转换成原码
对于正数和负数,补码规则不同,所以求原码方式也有所不同。无符号数与正数的方法相同。
1 对于最高位为0的有符号数,或无符号数,补码就是原码本身。如
0111 1100 既是补码,同时也就是原码。
2 对于最高位为1的有符号数,其表示的是负数。原码为按位取反,末位加一。如
补码:1100 0111
按位取反后结果为:0011 1000
加一后得到: 0011 1001
于是其原码就是-0011 1001
‘捌’ vhdl实现补码到原码的转换
已知补码求源码 其实就是对补码求补
先取反 再加1求补码 说明你做的是负数的求补 所以第一位应该是符号位
vhdl代码如下
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY exp IS
PORT(clk : in std_logic;
a : in std_logic_vector (7 downto 0);
b : out std_logic_vector (7 downto 0));
END exp;
ARCHITECTURE one OF exp IS
BEGIN
PROCESS(clk)
VARIABLE temp : std_logic_vector (7 downto 0);
begin
if clk'event and clk = '1' then
temp := a XOR "01111111"; --异或求反
temp := conv_std_logic_vector(conv_integer(temp)+1,8); --temp转换成整数加1后再转换回来
b <= temp; --结果输出
end if;
end process;
end one;
‘玖’ 原码,反码,补码。和他们之间的转换
是原码
不是源码
对于整数:补码反码原码都是一样的,也就是它本身的二进制
对于负数:
原码:绝对值的原码,将最高为变1
反码:绝对值的原码按位取反
补码:绝对值的原码按位取反再加1
‘拾’ 二进制原码补码转换c语言源代码
输入任意整数,输出32位的补码。
输入其他,结束程序。
#include
int
main()
{
int
i,num=0;
char
s[33]={0};
while(1==scanf("%d",&num)){
for(i=0;i<32;i++){
s[i]=
(0x01
&
(num>>(31-i)))
?
'1'
:
'0'
;
}
printf("%s\n",s);
}
return
0;
}