declare @str1 nvarchar(50)
declare @str2 nvarchar(50)
set @str1='-10000100001000000010001000000'
set @str2='-00000010001010000010001000001'
@str1 和 @str2 怎么样能异或 ?

解决方案 »

  1.   


    declare @str1 nvarchar(50)
    declare @str2 nvarchar(50)
    set @str1='-10000100001000000010001000000'
    set @str2='-00000010001010000010001000001'
    set @str1=replace(replace(@str1,'-',''),'+','')
    set @str2=replace(replace(@str2,'-',''),'+','')
    declare @str nvarchar(50),@s1 nvarchar,@s2 nvarchar
    set @str=''
    while(len(@str1)>0)
    begin
    set @s1=right(@str1,1)
    set @s2=right(@str2,1)
    if(@s1=@s2)
    set @str='0'+@str
    else
    set @str='1'+@str
    set @str1=left(@str1,len(@str1)-1)
    set @str2=left(@str2,len(@str2)-1)
    end
    select @str
      

  2.   


    declare @str1 nvarchar(50)
    declare @str2 nvarchar(50)
    set @str1='-10000100001000000010001000000'
    set @str2='-00000010001010000010001000001'
    set @str1=replace(replace(@str1,'-',''),'+','')
    set @str2=replace(replace(@str2,'-',''),'+','')
    declare @n1 bigint,@n2 bigint  
    set @n1=cast(right(@str1,19) as bigint)+cast(right(@str2,19) as bigint)
    set @n2=cast(left(@str1,len(@str1)-19) as bigint)+cast(left(@str2,len(@str2)-19) as bigint)
    select replace(ltrim(@n2)+ltrim(@n1),'2','0')
      

  3.   

    declare @str1 nvarchar(50)declare @str2 nvarchar(50), @str3 nvarchar(50)set @str1='10000100001000000010001000000'
    set @str2='00000010001010000010001000001'
    declare @i int
    set @I = len(@str1)while @I >= 1
    begin 
       set @str3 = case when substring(@str1,@i,1) = substring(@str2,@i,1) then '0' else '1' end+isnull(@str3,'')
       set @I = @i - 1
    endprint  @str3
    /*10000100001000000010001000000
    0000001000101000001000100000110000110000010000000000000001*/
      

  4.   

    declare @str1 nvarchar(50)declare @str2 nvarchar(50), @str3 nvarchar(50)set @str1='10000100001000000010001000000'
    set @str2='00000010001010000010001000001'
    declare @i intset @I = len(@str1)while @I >= 1
    begin 
       set @str3 = ltrim(cast(substring(@str1,@i,1) as int) ^ cast(substring(@str2,@i,1) as int))+isnull(@str3,'')
       set @I = @i - 1
    endprint  @str3/*10000100001000000010001000000
    0000001000101000001000100000110000110000010000000000000001
    */
      

  5.   

    declare @str1 nvarchar(50)
    declare @str2 nvarchar(50)
    set @str1='10000100001000000010001000000'
    set @str2='00000010001010000010001000001'declare @len int, @str3 nvarchar(50),@1 bit,@2 bit,@i intif len(@str1)>len(@str2)
    begin
    set @str3=left(@str1,len(@str1)-len(@str2))
    set @len=len(@str2)
    end
    else
    begin
    set @str3=left(@str2,len(@str2)-len(@str1))
    set @len=len(@str1)
    endset @i=1while @i<=@len
    begin
    select @1=substring(@str1,@i,1), @2=substring(@str2,@i,1)
    set @str3=@str3+ltrim(@1|@2)
    set @i=@i+1
    endselect @str3 -- 10000110001010000010001000001
      

  6.   

    不如用C做调用直接可
    a ^= b;