我看到并测试过,我谁知道根据和原理是什么?

解决方案 »

  1.   

    和相等的两个数,^之后的值应该都相等。
    例如5^5=(5-1)^(5+1)=(5-1-1)^(5+1+1)
    因为加一和减一,在和相同的两个数上发生,两个数对应二进制的最后一位都会跟原先的值取反,其他位的变化也一样。既然是^运算,两个bit都求反了,那^运算后的结果就不变。
    我的例子,是两个5开始,两个数相等,用不相等的,例如7,6,也可以一样考虑。只是个人的理解方式,也想看一下大家的想法。
      

  2.   

    //当初通穷举一遍得到的(*//
    标题:处理IDE特殊字符
    说明:就算Borland公司的人看了也会下一跳!
    设计:Zswang
    日期:2002-04-18
    支持:wjhu111#21cn.com
    //*)///////Begin Source
    const
      cIDEc: array[#0..#255] of string =
    (
    '^'#64, '^'#97, '^'#98, '^'#99, '^'#100, '^'#101, '^'#102, '^'#103, '^'#104,
    '^'#105, '^'#106, '^'#107, '^'#108, '^'#109, '^'#110, '^'#111, '^'#112, '^'#113,
    '^'#114, '^'#115, '^'#116, '^'#117, '^'#118, '^'#119, '^'#120, '^'#121, '^'#122,
    '^'#91, '^'#92, '^'#93, '^'#94, '^'#95, '^'#96, '#33', '#34', '#35', '#36',
    '#37', '#38', '#39', '#40', '#41', '#42', '#43', '#44', '#45', '#46', '#47',
    '#48', '#49', '#50', '#51', '#52', '#53', '#54', '#55', '#56', '#57', '#58',
    '^'#123, '^'#124, '^'#125, '^'#126, '^'#127, '#64', '^'#1, '^'#2, '^'#3, '^'#4,
    '^'#5, '^'#6, '^'#7, '^'#8, '^'#9, '^'#10, '^'#11, '^'#12, '^'#13, '^'#14,
    '^'#15, '^'#16, '^'#17, '^'#18, '^'#19, '^'#20, '^'#21, '^'#22, '^'#23, '^'#24,
    '^'#25, '^'#26, '^'#27, '^'#28, '^'#29, '^'#30, '^'#31, '^'#32, '^'#33, '^'#34,
    '^'#35, '^'#36, '^'#37, '^'#38, '^'#39, '^'#40, '^'#41, '^'#42, '^'#43, '^'#44,
    '^'#45, '^'#46, '^'#47, '^'#48, '^'#49, '^'#50, '^'#51, '^'#52, '^'#53,
    '^'#54, '^'#55, '^'#56, '^'#57, '^'#58, '^'#59, '^'#60, '^'#61, '^'#62,
    '^'#63, '^'#192, '^'#193, '^'#194, '^'#195, '^'#196, '^'#197, '^'#198, '^'#199,
    '^'#200, '^'#201, '^'#202, '^'#203, '^'#204, '^'#205, '^'#206, '^'#207, '^'#208,
    '^'#209, '^'#210, '^'#211, '^'#212, '^'#213, '^'#214, '^'#215, '^'#216, '^'#217,
    '^'#218, '^'#219, '^'#220, '^'#221, '^'#222, '^'#223, '^'#224, '^'#225, '^'#226,
    '^'#227, '^'#228, '^'#229, '^'#230, '^'#231, '^'#232, '^'#233, '^'#234, '^'#235,
    '^'#236, '^'#237, '^'#238, '^'#239, '^'#240, '^'#241, '^'#242, '^'#243, '^'#244,
    '^'#245, '^'#246, '^'#247, '^'#248, '^'#249, '^'#250, '^'#251, '^'#252, '^'#253,
    '^'#254, '^'#255, '^'#128, '^'#129, '^'#130, '^'#131, '^'#132, '^'#133, '^'#134,
    '^'#135, '^'#136, '^'#137, '^'#138, '^'#139, '^'#140, '^'#141, '^'#142, '^'#143,
    '^'#144, '^'#145, '^'#146, '^'#147, '^'#148, '^'#149, '^'#150, '^'#151, '^'#152,
    '^'#153, '^'#154, '^'#155, '^'#156, '^'#157, '^'#158, '^'#159, '^'#160, '^'#161,
    '^'#162, '^'#163, '^'#164, '^'#165, '^'#166, '^'#167, '^'#168, '^'#169, '^'#170,
    '^'#171, '^'#172, '^'#173, '^'#174, '^'#175, '^'#176, '^'#177, '^'#178, '^'#179,
    '^'#180, '^'#181, '^'#182, '^'#183, '^'#184, '^'#185, '^'#186, '^'#187, '^'#188,
    '^'#189, '^'#190, '^'#191);function StrToIDEc(mStr: string): string;
    var
      I: Integer;
    begin
      Result := '';
      for I := 1 to Length(mStr) do
        Result := Result + cIDEc[mStr[I]];
    end; { StrToIDEc }function IDEcToStr(mIDEc: string): string;
    var
      C: Char;
      I, L: Integer;
      T: string;
    begin
      Result := '';
      I := 1;
      L := Length(mIDEc);
      mIDEc := LowerCase(mIDEc);
      while I <= L do begin
        if mIDEc[I] = '^' then begin
          for C := #0 to #255 do
            if cIDEc[C] = Copy(mIDEc, I, 2) then begin
              Result := Result + C;
              Inc(I, 2);
              Break;
            end;
        end else if mIDEc[I] = '#' then begin
          T := '';
          Inc(I);
          while mIDEc[I] in ['0'..'9'] do begin
            T := T + mIDEc[I];
            Inc(I);
          end;
          if T <> '' then Result := Result + Chr(StrToIntDef(T, 0));
        end else Inc(I);
      end;
    end; { IDEcToStr }
    ///////End Source///////Begin Demo
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      Clipboard.AsText := StrToIDEc(Edit1.Text);
      Caption := IDEcToStr(Clipboard.AsText);
      ShowMessage(^^!^3^4^%);
    end;
    ///////End Demo