1

このショート (署名済み) を考えると:

&Hxxxx

したい:

  • 右端&HxxFFを SByte (signed) として抽出
  • &H7Fxx左をバイト (符号なし) として抽出します。
  • 一番左&H8xxxが正か負かを識別します (ブール値の結果)
4

5 に答える 5

1
Dim test As UInt16 = &HD 'a test value 1101
Dim rb As Byte 'lsb
Dim lb As Byte 'msb - 7 bits
Dim rm As UInt16 = &HFF 'lsb mask
Dim lm As UInt16 = &H7F00   'msb mask
Dim sgn As Byte = &H80 'sign mask

For x As Integer = 0 To 15 'shift the test value one bit at a time
    rb = CByte(test And rm) 'get lsb
    lb = CByte((test And lm) >> 8) 'get msb
    Dim lbS, rbS As Boolean 'sign

    'set signs
    If (rb And sgn) = sgn Then rbS = True _
     Else rbS = False

    If (lb And sgn) = sgn Then lbS = True _
     Else lbS = False 'should always be false based on mask

    Console.WriteLine(String.Format("{0} {1} {2}  {3} {4}",
        x.ToString.PadLeft(2, " "c),
        Convert.ToString(lb, 2).PadLeft(8, "0"c),
        Convert.ToString(rb, 2).PadLeft(8, "0"c),
        lbS.ToString, rbS.ToString))

    test = test << 1
Next
于 2010-07-08T00:58:18.733 に答える
1
inline char getLsb(short s)
{
    return s & 0xff;
}

inline char getMsb(short s)
{
    return (s & 0xff00) >> 8; 
}

inline bool isBitSet(short s, unsigned pos)
{
    return (s & (1 << pos)) > 0;
}
于 2010-07-07T23:07:21.387 に答える
1

一番右の0xxxffを抽出

myShort & 0x00FF

左側の 0xffxx を抽出します

(myShort & 0xFF00) >> 8

一番左の 0xfxxx が正か負かを識別します (これは符号付きショートです)。

(myShort & 0xF000) >= 0;
于 2010-07-07T23:16:42.227 に答える
0
  • 右端の &HxxFF を SByte (signed) として抽出

    CType(s AND &H00FF, SByte)

  • 左の &H7Fxx をバイト (符号なし) として抽出します。

    CType((s AND &H7F00) >> 8, Byte)

  • 一番左の &H8xxx が正か負かを識別します (ブール値の結果)

    s AND &H8000 > 0

私はVBで働いていたので、それらの仕事だと思います

于 2010-07-07T23:57:42.763 に答える
0

ええと...

value & 0x00ff
(value & 0xff00) >> 8
(value & 0xf000) >= 0

編集:上位8ビットだけでなく、バ​​イト値が必要だと思います。

于 2010-07-07T23:16:55.260 に答える