如何使用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;
答案 0 :(得分:2)
在Ada中编写这个循环的方法就是这样的。我假设Num
是Integer
。
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
在Interfaces
中定义。我利用了你的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'));