Binary 如何在ada中使用移位运算符打印二进制值

Binary 如何在ada中使用移位运算符打印二进制值,binary,ada,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

如何在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;
也许:

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;

在Ada中编写这个循环的方法是这样的。我假设
Num
是一个
整数

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_32
Shift_Right
。我利用了C代码在每一位之前输出一个空格的事实;这恰好是
Unsigned_32'Image
所做的——为非负数添加了额外的空间。如果您不需要这个空间,可以使用
Ada.Strings.Fixed.Trim
来消除它。

您可以编写一个函数(可能更干净)


你发布的代码与Ada无关,所以你不能说Ada中的东西不起作用。“请注意,即使
>
&
在Ada中的定义与在C中的定义相同,您的Ada示例也会(1)漏掉低阶位,并(2)向后打印位。@ajb您能给出如何在Ada中获得二进制no的大致方法吗?我对您的代码没问题,但如何避免2###我只想要二进制no(0或1)我不想打印任何额外的东西(即2和#)plz帮助编译时出现很多错误,请您修复它。bit_shift.adb:2:05:“接口”不可见bit_shift.adb:2:05:interface声明不可见。ads:36 bit_shift.adb:5:09:“未检查的转换”“不可见位移位。adb:5:09:在a-unccon处不可见声明。ads:20位移位。adb:5:40:“无符号位32”不可见(后面有更多引用)位移位。adb:5:40:在接口处不可见声明。ads:57位移位。adb:5:40:实例化放弃位移位。adb:6:24:“到无符号位32”是未定义的位移位。adb:6:40:“Num”是未定义的bit_shift.adb–是50分钟前,您需要在程序顶部添加
子句,以引入
接口
未选中的转换
function binary (e:natural) return string is 
(if e=0 then "" else binary (e/2) & (if e mod 2=0 then '0' else '1'));