Van*_*nel 2 c java android unsigned bitwise-operators
我正在将iOS应用迁移到Android.
这个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
Run Code Online (Sandbox Code Playgroud)
我在Objective-C中有这个代码:
uint32_t vectorRxV1;
UInt16 xxsDas;
[ ... ]
UInt8 CM_L = (vectorRxV1 & 0xBB000000) >> 24;
Run Code Online (Sandbox Code Playgroud)
并且:
uint32_t vectorTxV0 += ((vectorTxV1<<4) + VectorSelK0) ^ ((vectorTxV1>>5) + VectorSelK1);
Run Code Online (Sandbox Code Playgroud)
并且:
Uint8 sincroRx = (sincroRx & 0xD9);
sincroRx = (sincroRx | 0xA2);
Run Code Online (Sandbox Code Playgroud)
我不确定我是否使用long代替uint32_t(或int代替UInt8上面的代码将给出不同的值.
UPDATE
我有这些运营商:>>,<<,&,^和|.
你怎么看?
为了减少无符号数据类型的缺失,Java引入了>>>向右移位的运算符,它不会对正在移位的值进行符号扩展.这是唯一一个因为数字被解释为有符号而受到影响的操作.
如果uint32_t用" int替换全部>>" 并替换"无符号"值上的所有操作>>>,您将在操作结果中获得相同的位模式.