逻辑运算问题(求补码)

问题遇到的现象和发生背景

补码的逻辑运算问题

用代码块功能插入代码,请勿粘贴截图
#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;
}