补码的逻辑运算问题
#include<iostream>
#include<math.h>
using namespace std;
int main()
{
unsigned char bytes[8] = {0xF4, 0xFF,0xFF,0xFF};
unsigned int unsignedInteger = bytes[0] ^ (bytes[1] << 8) ^ (bytes[2] << 16) ^ (bytes[3] << 24);
int signedInteger = unsignedInteger;
printf("%d\n",vu);
printf("The unsigned integer is %u\n", unsignedInteger);
printf("The signed integer is %d\n", signedInteger);
return 0;
}
#include<iostream>
#include<math.h>
using namespace std;
int main()
{
unsigned char bytes[8] = {0xF, 0x4, 0xF, 0xF,0xF,0xF,0xF,0xF};
unsigned int unsignedInteger = bytes[0] ^ (bytes[1] << 4) ^ (bytes[2] << 8) ^ (bytes[3] << 12)^ (bytes[4] << 16)^ (bytes[5] << 20)^ (bytes[6] << 24)^ (bytes[7] << 28);
int signedInteger = unsignedInteger;
printf("The unsigned integer is %u\n", unsignedInteger);
printf("The signed integer is %d\n", signedInteger);
return 0;
}
第一个是对的,第二个是错的
如何让第二段代码结果跟第一段一样,在改变数组格式的情况下输出补码正确
#include<iostream>
#include<math.h>
using namespace std;
int main()
{
unsigned char bytes[8] = {0xF, 0x4, 0xF, 0xF,0xF,0xF,0xF,0xF};
unsigned int unsignedInteger = bytes[1] ^ (bytes[0] << 4) ^ (bytes[3] << 8) ^ (bytes[2] << 12)^ (bytes[5] << 16)^ (bytes[4] << 20)^ (bytes[7] << 24)^ (bytes[6] << 28);
int signedInteger = unsignedInteger;
printf("The unsigned integer is %u\n", unsignedInteger);
printf("The signed integer is %d\n", signedInteger);
return 0;
}