如何使用ada中的shift运算符打印二进制值

时间:2014-12-11 11:37:03

标签: binary ada

如何使用ada中的shift运算符在二进制文件中打印值,就像我们在下面的c / c ++中所做的那样,我的代码在c中是好的,但在ada中的相同实现很糟糕。请帮帮我

    int num=10;
    for( i=31;i >=0; i--)
    printf(" %d",num>>i &1) // it s good but how to implement in ada i tired same in ada but its bad?

   In ada

   for i in 1..31 loop
  put(num>>i &1); -- error msg  is missing ")"  plz help
 end loop;

3 个答案:

答案 0 :(得分:2)

在Ada中编写这个循环的方法就是这样的。我假设NumInteger

declare
    use Interfaces;
    function To_Unsigned_32 is new
        Unchecked_Conversion (Integer, Unsigned_32);
    N : Unsigned_32 := To_Unsigned_32 (Num);
    Bit : Unsigned_32;
begin
    for I in reverse 0 .. 31 loop
        Bit := Shift_Right (N, I) and 1;
        Ada.Text_IO.Put (Unsigned_32'Image (Bit));
    end loop;
end;

Unsigned_32Shift_RightInterfaces中定义。我利用了你的C代码在每个位之前输出一个空格的事实;这恰好是Unsigned_32'Image的作用 - 非负数包含额外的空格。如果您不想要那个空间,可以使用Ada.Strings.Fixed.Trim来摆脱它。

答案 1 :(得分:0)

也许:

with Ada.Text_IO.Integer_IO;
procedure Foo is
  package IO is new Ada.Text_IO.Integer_IO (Integer);
begin
   IO.Put (42232, Base => 2);
end Foo;

答案 2 :(得分:0)

你可以写一个函数(也许更干净)

function binary (e:natural) return string is 
(if e=0 then "" else binary (e/2) & (if e mod 2=0 then '0' else '1'));