cashier
23-12-2007, 11:48
Hôm nay mới học về xử lí bít . Có một bài tập là đổi một số từ hệ cơ số 10 sang hệ cơ số 8, mình đã làm theo thuật toán nhưng chẳng hiểu sao lại ra không đúng :no: Bạn nào biết mình sai chỗ nào thì chỉ giáo hộ nha :
Thuật toán là ta cắt từng nhóm 3 số ( từ phải qua trái) của các bit ( do 1 số khi đưa vào máy xử lí đã được mã hoá dưới dạng nhị phân - lưu trong 8 bít của 1 byte - đối với kiểu byte hoặc 16 bit đối với kiểu word ... )
Với mỗi số ta đổi sang hệ cơ số 10 Và viết lần lượt
VD 11 = 00001011 ( đối với kiểu byte)
b1 : ta tách thành 00 001 011
b2 : ta chuyển 00 =0; 001 =1 ; 011 = 3
Vậy số 11 trong hệ bát phân là 013 hay viết là 13
Sau đây là code của mình :
Function GetNum(x:word;i,j:byte):word;
Var k:byte;
Begin
k:=(sizeof(x) shl 3)-1-j;
getnum:=x shl k shr i;
End;
Procedure Xprint(x:word);
Var k:word;
i:integer;
Begin
i:=(sizeof(x) shl 3) -1;
k:=i mod 3;
Write(Getnum(x,i,i+k));
i:=i-k-1;
While i>=2 do
begin
Write(Getnum(x,i,i-2));
i:=i-3;
End;
Procedure Test;
Var x:word;
Begin
Write('Nhap so ban muon doi : ');Readln(x);
Write(' ');Xprint(x);
Readln;
End;
BEGIN
Test;
End.
Vậy mà chẳng hiểu sao khi chạy với tất cả các số đều sai
Ví dụ như với x = 11 thì nó chẳng ra 13 mà lại ra là 002 :emlaugh:
Làm ơn chỉ dùm mình với :helpsmili
Thuật toán là ta cắt từng nhóm 3 số ( từ phải qua trái) của các bit ( do 1 số khi đưa vào máy xử lí đã được mã hoá dưới dạng nhị phân - lưu trong 8 bít của 1 byte - đối với kiểu byte hoặc 16 bit đối với kiểu word ... )
Với mỗi số ta đổi sang hệ cơ số 10 Và viết lần lượt
VD 11 = 00001011 ( đối với kiểu byte)
b1 : ta tách thành 00 001 011
b2 : ta chuyển 00 =0; 001 =1 ; 011 = 3
Vậy số 11 trong hệ bát phân là 013 hay viết là 13
Sau đây là code của mình :
Function GetNum(x:word;i,j:byte):word;
Var k:byte;
Begin
k:=(sizeof(x) shl 3)-1-j;
getnum:=x shl k shr i;
End;
Procedure Xprint(x:word);
Var k:word;
i:integer;
Begin
i:=(sizeof(x) shl 3) -1;
k:=i mod 3;
Write(Getnum(x,i,i+k));
i:=i-k-1;
While i>=2 do
begin
Write(Getnum(x,i,i-2));
i:=i-3;
End;
Procedure Test;
Var x:word;
Begin
Write('Nhap so ban muon doi : ');Readln(x);
Write(' ');Xprint(x);
Readln;
End;
BEGIN
Test;
End.
Vậy mà chẳng hiểu sao khi chạy với tất cả các số đều sai
Ví dụ như với x = 11 thì nó chẳng ra 13 mà lại ra là 002 :emlaugh:
Làm ơn chỉ dùm mình với :helpsmili