二进制的转换?急急急!!!(0分)

  • 主题发起人 主题发起人 百事
  • 开始时间 开始时间

百事

Unregistered / Unconfirmed
GUEST, unregistred user!
大家好,我是新手,有点问题请教大家!
在的delphi中是否有把补码变成原码的函数,或者是怎么实现,如果有这样的代码就好了,
谢谢你们!
email to : xulingjuan521@hotmail.com
 
if i>0 then
result := i else
result := not(i)+1;
 
i 和result怎么定义?
 
补码的定义是什么?
 
我在delphi中就是没找到二进制的定义
var i,result:integer;
begin
i:=strtoint(edit1.text);
if i>0
then
result:=i
else
result:=not(i)+1;
edit2.Text:=inttostr(result);
end;
我这样结果也出不来
如:
10110110变的话就应该是:01001010
但是我出来的结果是:
10110110
谢谢你,请指教!
 
原来你只是对一个字节操作,我还以为是整形。下面的就可以了。
function imp(i: byte):byte;
begin
if i<128 then
result := i else
result := not(i)+1;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
caption := format('%x',[imp(182)]);
end;
 
这样也不行,出来的是4A,出来的也应该是二进制啊!
我刚才给的是8位二进制,一般都用16位,且第一位是符号位,1:负,0:正
谢谢你了!
 
faint.., 十六进制的4A就是二进制的01001010,明白了?
 
是的,我明白,但是我要的是输出是二进制,因为我要用二进制,可以把十六进制转化成
二进制不?
 
我输入的也要用二进制?
谢谢!
 
写一个呀
这个很好转的呀,
对就一下就行了呀
Function HexToBit(C:Char):String;
begin
case C of
'0':Result:='0000';
'1':Result:='0001';
'2':Result:='0010';
'3':Result:='0011';
.....
end;
end;
 
function imp(i: byte):byte;
begin
if i<128 then
result := i else
result := not(i)+1;
end;

procedure TForm1.Button1Click(Sender: TObject);
var i:byte;
begin
if i<128
then
edit2.text:='+'+format('%x',[imp(strtoint(edit1.Text))])
else
edit2.text :='-'+ format('%x',[imp(strtoint(edit1.Text))]);
end;
各位高手请看看,这样还要出错是为什么?
输入:10110110 结果出来是+62 正确应该是-74才对啊
对一个补码求起真值的公式是:
符号位为0,其余七位既为此数二进制值数值
符号位为1,其余七位数应按位取反,再在最低位加1,才是此数的二进制数值
就是一般是16位数,不是8位,怎么改?
 
高手们发表一下意见三!!!!
 
你该自己想一下为什么会这样!byte是无符号的。
 
是的,我知道啊,后面的‘+’和‘-’只是我想看清楚自己加的,有关系吗,如果我不加
的话,象这样:
function imp(i: byte):byte;
begin
if i<128 then
result := i else
result := not(i)+1;
end;

procedure TForm1.Button1Click(Sender: TObject);
var i:byte;
begin
edit2.text := format('%x',[imp(strtoint(edit1.Text))]);
end;

这样出来的只也不对,10110110的话,出来也应该是74啊,但是结果不是
请指教!!!
 
procedure TForm1.Button1Click(Sender: TObject);
var i:byte;
begin
i:=strtoint(edit1.Text);
//给i赋原值
if i<128 //好像在这里,这个I的值应该是个随机数吧,没有给初值
then
edit2.text:='+'+format('%x',[imp(strtoint(edit1.Text))])
else
edit2.text :='-'+ format('%x',[imp(strtoint(edit1.Text))]);
end;
 
可能是你的二进制转换有问题。
-------------------------------------------
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
Label1: TLabel;
Button2: TButton;
Label2: TLabel;
procedure Button1Click(Sender: TObject);
procedure Edit1KeyPress(Sender: TObject;
var Key: Char);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
implementation
{$R *.DFM}
//求一个字节的补码
function imp(i: byte):byte;
begin
if i<128 then
result := i else
result := not(i)+1;
end;

//二进制字符串转化为byte
function BinStrToDec(s: string): byte;
var
i, len: integer;
begin
result := 0;
len := length(s);
for i:=1 to lendo
begin
result := result + strtoint(s) * ((2 shl (len-i))shr 1);
end;
end;

//将一个字节以二进制字符串表示
function ByteToBinStr(b: byte): string;
var
m: byte;
begin
result := '';
repeat
m := b mod 2;
result := inttostr(m) + result;
b := b div 2;
until b<2;
result := inttostr(b)+result;
if length(result)<8 then
for m:=1 to (8-length(result))do
result := '0'+result;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Label1.Caption := inttostr(BinStrToDec(Edit1.Text));
caption := format('%d',[imp(BinStrToDec(Edit1.Text))]);
end;

//在Edit1内输入'0'或'1'
procedure TForm1.Edit1KeyPress(Sender: TObject;
var Key: Char);
begin
if (not (Key in ['0','1',#8])) then
key := #0;
if (length(Edit1.Text)>=8)and(Key<>#8) then
key := #0;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
Label2.Caption := ByteToBinStr(imp(BinStrToDec(Edit1.Text)));
end;

end.

 
很谢谢大家,谢谢你们给我的帮助,我刚开始做软件,以后还有很多要请教大家的地方。
如果能和你们成为朋友,我将受益非浅,谢谢!
to zw84611:email to :xulingjuan521@hotmail.com
留下你的联系方式吧,谢谢!
 
后退
顶部