function SetCharBit(Ch: Char; Pos, Bit: Integer): Char;
var
MyByte, Byte2: Byte;
MyCh: char;
begin
if Bit = 1 then
begin
Move(Ch, Byte2, 1); //将Ch的前1个字节传给Byte2
MyByte := Round(Power(2, Pos));//2的Pos次方四舍五入
Byte2 := Byte2 or MyByte;
Move(Byte2, MyCh, 1);
end
else if Bit = 0 then
begin
Mybyte := $FF - Round(Power(2, Pos));
Move(Ch, Byte2, 1);
Byte2 := Byte2 and MyByte;
Move(Byte2, MyCh, 1);
end;
Result := MyCh;
end;
请逐句解释一下,谢谢
解决方案 »
- 大数据量的计算速度问题
- 简单一问,迅速给分
- 看看这个源文件有什么问题?
- 在线求救
- 关于字符串处理的,帮个忙呀
- 在MIDAS中怎么过滤汉字
- 真难啊!!!!!!!!!!!!
- 数据库主键冲突的异常捕获问题,急。
- csDropDownList类型的combobox怎么显示不了数据(比如调出事先通过combobox存入数据库的数据:combobox.text:=fieldbyname('ssxy').asstring),可是不显示
- 如何在delphi中实现最小化到右下角,如oicq的最小化图标?
- Delphi 地址错误 'DFWEDIT.DLL'. Read of address和其他地址错误
- 多表查询如何用SQL语句表达
function SetCharBit(Ch: Char; Pos, Bit: Integer): Char;
var
MyByte, Byte2: Byte;
MyCh: char;
begin
if Bit = 1 then
begin
Move(Ch, Byte2, 1); //将Ch的前1个字节传给Byte2
MyByte := Round(Power(2, Pos));//2的Pos次方四舍五入
Byte2 := Byte2 or MyByte;//Byte2与MyByte进行or的位运算,然后传给Byte2
Move(Byte2, MyCh, 1);//将Byte2的前1个字节传给MyCh
end
else if Bit = 0 then
begin
Mybyte := $FF - Round(Power(2, Pos));//$FF减去2的Pos次方传给Mybyte
Move(Ch, Byte2, 1);//将Ch的前1个字节传给Byte2
Byte2 := Byte2 and MyByte;//Byte2与MyByte进行and的位运算,然后传给Byte2
Move(Byte2, MyCh, 1);//将Byte2的前1个字节传给MyCh
end;
Result := MyCh;//将MyCh作为结果返回
end;
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Button5: TButton;
Button6: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
end;var
Form1: TForm1;implementation{$R *.dfm}const
w1: Word = 61680; {二进制表示: 11110000 11110000}
w2: Word = 3855; {二进制表示: 00001111 00001111}
var
w: Word;{not 运算, 只有一个运算数}
procedure TForm1.Button1Click(Sender: TObject);
begin
w := not w1; {not 就是按位(给二进制的每一位)取反}
{11110000 11110000 取反后就是:}
{00001111 00001111 }
ShowMessage(IntToStr(w)); {3855}
end;{and 运算, 需要两个运算数}
procedure TForm1.Button2Click(Sender: TObject);
begin
w := w1 and w2; {and 就是把两个运算数按位对比, 同是1返回1, 反之返回0}
{w1: 11110000 11110000 与}
{w2: 00001111 00001111 每一位都不同, 所以返回:}
{w : 00000000 00000000}
ShowMessage(IntToStr(w)); {0}
end;{or 运算, 需要两个运算数}
procedure TForm1.Button3Click(Sender: TObject);
begin
w := w1 or w2; {and 就是把两个运算数按位对比, 只有其中一个是1就返回1; 都是0才返回0}
{w1: 11110000 11110000 与}
{w2: 00001111 00001111 or 后会返回:}
{w : 11111111 11111111}
ShowMessage(IntToStr(w)); {65535}
end;{xor 运算, 需要两个运算数}
procedure TForm1.Button4Click(Sender: TObject);
begin
w := w1 or w2; {and 就是把两个运算数按位对比, 只有两个不一样才返回1; 一样(都是0或都是1)则返回0}
{w1: 11110000 11110000 与}
{w2: 00001111 00001111 xor 后会返回:}
{w : 11111111 11111111}
ShowMessage(IntToStr(w)); {65535; 两个例数不太好, 没给 xor 和 or 区别明显}
end;{shr 运算, 只有一个运算数}
procedure TForm1.Button5Click(Sender: TObject);
begin
w := w1 shr 1; {shr 是按位右移, shr 1 是右移一位}
{w1: 11110000 11110000 右移一位后是:}
{w : *1111000 01111000 前面的*就是0了}
ShowMessage(IntToStr(w)); {30840} {同理, 可以移动几位, 譬如 3 位}
w := w1 shr 3;
ShowMessage(IntToStr(w)); {7710} {w1 shr 3 相当与 w1 div 2的3次方}
w := w1 div 8;
ShowMessage(IntToStr(w)); {7710}
end;{shl 运算, 只有一个运算数}
procedure TForm1.Button6Click(Sender: TObject);
var
i: Integer;
begin
w := w1 shl 1; {shr 是按位左移}
{w1: 11110000 11110000 左移一位后是:}
{w : 1110000 111100000 }
ShowMessage(IntToStr(w)); {57824} {左移 3 位}
w := w1 shl 3;
ShowMessage(IntToStr(w)); {34688} {w1 shl 3 相当与 w1 * 2的3次方}
w := w1 * 8;
ShowMessage(IntToStr(w)); {34688} {注意这里有个问题: w1*8 以后怎么小了呢?}
{因为前面已经定义了 w 是 Word 类型的, 它的大小只有2个字节(二进制16位), 超出会忽略} {如果换成32位(4字节)的 Integer 类型, 肯定就会有真实的结果:} i := w1 shl 3;
ShowMessage(IntToStr(i)); {493440} i := w1 * 8;
ShowMessage(IntToStr(i)); {493440}
end;end.
function SetCharBit(Ch: Char; Pos, Bit: Integer): Char;
当Bit=1时,返回Byte(Ch)+2的Pos次方对应的字符
当Bit=0时,返回Byte(Ch)-2的Pos次方对应的字符
function SetCharBit(Ch: Char; Pos, Bit: Integer): Char;
当Bit=1时,返回Byte(Ch)+2的Pos次方对应的字符
当Bit=0时,返回Byte(Ch)-2的Pos次方对应的字符如果2的Pos次方这个换做移位的解释呢?
function SetCharBit(Ch: Char; Pos, Bit: Integer): Char;
当Bit=1时,返回Byte(Ch)+2的Pos次方对应的字符
当Bit=0时,返回Byte(Ch)-2的Pos次方对应的字符如果2的Pos次方这个换做移位的解释呢?可以
当Bit=1时,返回Byte(Ch)+1向左移Pos位
当Bit=0时,返回Byte(Ch)-1向右移Pos位
function SetCharBit(Ch: Char; Pos, Bit: Integer): Char;
当Bit=1时,返回Byte(Ch)+2的Pos次方对应的字符
当Bit=0时,返回Byte(Ch)-2的Pos次方对应的字符如果2的Pos次方这个换做移位的解释呢?可以
当Bit=1时,返回Byte(Ch)+1向左移Pos位
当Bit=0时,返回Byte(Ch)-1向右移Pos位Byte(Ch)+(1向左移Pos位)
Byte(Ch)-(1向右移Pos位)
对吗?
function SetCharBit(Ch: Char; Pos, Bit: Integer): Char;
当Bit=1时,返回Byte(Ch)+2的Pos次方对应的字符
当Bit=0时,返回Byte(Ch)-2的Pos次方对应的字符如果2的Pos次方这个换做移位的解释呢?可以
当Bit=1时,返回Byte(Ch)+1向左移Pos位
当Bit=0时,返回Byte(Ch)-1向右移Pos位Byte(Ch)+(1向左移Pos位)
Byte(Ch)-(1向右移Pos位)
对吗?是的