declare @b binary(2),@b1 binary(2)
set @b=0x00FF
set @b1=convert(binary,'安')
print cast(@b as int)&cast(@b1 as int)

解决方案 »

  1.   

    为什么我下面的语句返回0呢?
    print cast(convert(binary, '安') as int)
    雨枫的@b有什么用吗?
      

  2.   

    @b=256
    16位两字节二进制表示是0000000011111111
    他与目标数进行与操作,根据与的特点,两者为1才为1,所以它的目的是取出目标数的低八位
    即安的45234的十六进制表示为B0B2,而其
    二进制为10110000 10110010与00000000 11111111进行与操作

        10110000 10110010
      & 00000000 11111111
    ------------------------
    得  00000000 10110010
    应该如此吧
    不知道你看不看得懂
      

  3.   

    回复冰火:我知道是高八位和低八位,但问题是怎么才能取到高、低8位,TSQL中有移位操作吗?
      

  4.   

    哈哈,这个问题有意思。declare @bytes binary(2)
    set @bytes=convert(binary,'安')print cast(@bytes as int)print 0x00FF & cast(@bytes as int)print 0xFF00 & cast(@bytes as int)print 178 | 45056--- out put ----
    45234
    178
    45056
    45234
      

  5.   

    取高位的8位运算后除以256移位操作不一定要用移位运算来做,可以利用除法,右移8位相当于除以256比如"烫"字的高8位为204,低八位为204declare @bytes binary(2)
    set @bytes=convert(binary,'烫')--低8位的10进制值
    print 0x00FF & cast(@bytes as int)
    --高8位的10进制值
    print (0xFF00 & cast(@bytes as int))/256--结果
    204
    204测试
    select char(204)+char(204)--结果
         
    ---- 
    烫(所影响的行数为 1 行)
      

  6.   

    declare @bytes binary(2)
    set @bytes=convert(binary,'安')--低8位
    print 0x00FF & cast(@bytes as int)
    --高8位
    print (0xFF00 & cast(@bytes as int))/256--结果
    178
    176select char(176)+char(178)--结果
    ---- 
    安(所影响的行数为 1 行)