VB xor 有BUG?因为接收到的数据有正负之分,故用到异或命令.但65535 xor 65535 =0 (正确) 但 65535 xor &Hffff 却是-65536 ,负数在计算机中是以补码形式存在,补码为其绝对值 逐位取反再加1得到,那到反推之,如果根据最高位知道一个数为负数,那么其值应该是先减1再逐位取反,然后在前面加上负号(我这么认为),但是实际上,计算机还是先把这个数(补码)逐位取反再加1.真是糊涂了!

问题描述:

VB xor 有BUG?
因为接收到的数据有正负之分,故用到异或命令.但65535 xor 65535 =0 (正确) 但 65535 xor &Hffff 却是-65536 ,负数在计算机中是以补码形式存在,补码为其绝对值 逐位取反再加1得到,那到反推之,如果根据最高位知道一个数为负数,那么其值应该是先减1再逐位取反,然后在前面加上负号(我这么认为),但是实际上,计算机还是先把这个数(补码)逐位取反再加1.真是糊涂了!

因为你用&Hffff默认是Integer的类型的,而Integer的取值范围是-32768(&H8000) 到32767(&H7FFF), 那么你用&HFFF的值就是Integer的-1了,65535 xor -1当然就是 -65536了. 这个跟你说的那个补码没有关系了,因为在VB里,&HFFFF是先转换成对应的Integer(-1值)后才参与xor计算的.