作业帮 > 综合 > 作业

pascal中shl的用法

来源:学生作业帮 编辑:拍题作业网作业帮 分类:综合作业 时间:2024/04/29 17:20:34
pascal中shl的用法
var
n:longint;
a:array[1..10]of longint;
procedure dfs(level,can:longint);
var
\x05i,p,pos:longint;
begin
\x05if (level>n) then
\x05begin
\x05\x05for i:=1 to n do write(a[i]);
\x05\x05writeln;
\x05\x05exit;
\x05end;
\x05p:=not can and (1 shl n-1);//这个shl为啥可以做布尔类型呢
\x05while (p0) do begin
\x05\x05pos:=p and -p;
\x05\x05a[level]:=trunc(ln(pos)/ln(2))+1;
\x05\x05dec(p,pos);
\x05\x05dfs(level+1,can+pos);
\x05end;
end;
begin
\x05readln(n);
\x05dfs(1,0);
\x05readln
end.
这是位运算!
位运算也是一种运算符,它比+-*/都快.
主要有以下几类:
a and b 把a和b都转化成二进制,分别对二进制的a和b的每一位进行and运算.
例如6 and 5 =4 ---> 6=110,5=101,6 and 5=110 and 101 =100 =4.
a or b 把a和b都转化成二进制,分别对二进制的a和b的每一位进行or运算.
例如6 or 5 =7 ---> 6=110,5=101,6 or 5=110 or 101 =111 =7.
not a 把a转换成二进制,分别对二进制的每一位进行not 运算
(根据数据类型不同结果也不同)
a shl b 等价于 ab 表示将a转换成二进制后向右移动b为.
例如:24 shr 2 =11000 shr 2 =110=6
a xor b 将a、b转成二进制后进行不进位的加法运算.
例如:6 xor 5 =3 110 xor 101 =011=3
建议初学者先不要去学习这些位运算,因为它们都是根数据类型有关,通常用于
boolean类型(只有1位),用于整数多用于优化程序方面.