Delphi 位运算符 shl shr or xor and not

Delphi与C++位运算符的对应, 学习了下.

(地址是:)

位运算符对应关系如下:

C++  Delphi
&and
|or
取反~not
异或^xor
左移<<shl
右移>>shr

接下来是弄明白该符号的具体意思:

x shl nx的二进制数向左移n位,尾部补n个零
x shr nx的二进制数向右移n位,首部补n个零
x or n 二进制(x 、n)相加,同1为1,有1则1 :1+1=1,0+1=1,0+0=0
x xor n二进制(x 、n)相加, 同1为0,有1则1 :1+1=0,0+1=1,0+0=0
x and n二进制(x 、n)相加,同1为1,有0则0 :1+1=1,0+1=0,0+0=0
not x二进制取反(需先指定数据的大小),1为0,0为1

    

例子1: 255 shl 2

      1. 255转化为二进制为: 1111 1111

      2. 该二进制数左移2位, 尾部补0,二进制变成: 11 1111 1100,转化十进制为1020

例子2: 255 shr 2

      1. 255转化为二进制为: 1111 1111

      2. 该二进制数右移2位, 首部补0,二进制变成: 0011 1111,转化十进制为63

例子3: 255 or 36

      1. 255转化为二进制为: 1111 1111

          36转化为二进制为  : 0010 0100 根据规则同1为1 有1则1 的规则进行转换

            转化后的二进制为 : 1111 1111 转化十进制为255

例子4: 255 xor 36

      1. 255转化为二进制为: 1111 1111

          36转化为二进制为  : 0010 0100 根据规则同1为0 有1则1 的规则进行转换

            转化后的二进制为 : 1101 1011 转化十进制为219

例子5: 255 xor 88

      1. 255转化为二进制为: 1111 1111

          88转化为二进制为  : 0101 1000 根据规则同1为1 有0则0 的规则进行转换

            转化后的二进制为 : 0101 1000 转化十进制为88

例子6: not 99

var
  iRet: Integer;
  iCal: Byte;
begin
  //需要指定数据的类型
  iCal:= 99;
  iRet:= not iCal;
  Memo1.Lines.Add(Format('运算结果: %u', [iRet]));
end;

 

x:=x shl 1 二进制数向左移1位,尾部补1个零,相当于x:=x*2;
x:=x shl 2 二进制数向左移2位,尾部补2个零,相当于x:=x*4;
...
x:=x shl n 二进制数向左移n位,尾部补n个零,相当于x:=x*2^n;

x:=x shr 1 二进制数向右移1位,首部补1个零,相当于x:=x div 2;
x:=x shr 2 二进制数向右移2位,首部补2个零,相当于x:=x div 4;
...
x:=x shr n 二进制数向右移n位,首部补n个零,相当于x:=x div (2^n);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

linuxghs

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值