我正在将iOS应用程序迁移到Android。将无符号类型的按位运算符迁移到java(无无符号类型)
这个iOs应用程序使用像uint32_t类型。这是一个unsigned int 32,它在Java上不可用。
uint32_t range is 0 to 4,294,967,295.
int32_t can hold values from –2,147,483,648 to 2,147,483,647
我有这样的代码在Objective-C:
uint32_t vectorRxV1;
UInt16 xxsDas;
[ ... ]
UInt8 CM_L = (vectorRxV1 & 0xBB000000) >> 24;
而且也:
uint32_t vectorTxV0 += ((vectorTxV1<<4) + VectorSelK0)^((vectorTxV1>>5) + VectorSelK1);
而且也:
Uint8 sincroRx = (sincroRx & 0xD9);
sincroRx = (sincroRx | 0xA2);
我不知道如果我使用long
而不是uint32_t
(或int
而不是UInt8
,上面的代码会给出不同的值。
UPDATE
我有这些运营商:>>
,<<
,&
,^
和|
。
您认为如何?
如果你已经决定留在C,那么这是一个问题了吗? – trumpetlicks
按位运算符独立于符号运行,除了右移。使用前检查右移是算术还是逻辑。 – nhahtdh
@trumpetlicks因为向左移不签名扩展。 – dasblinkenlight