gpt4 book ai didi

c++ - 默认情况下,C++ 是否将二进制数读取为二进制补码?

转载 作者:太空宇宙 更新时间:2023-11-04 13:03:48 24 4
gpt4 key购买 nike

我有一段代码从硬件的寄存器中读取两个字节:

short MPU9250::combineRegisters(unsigned char msb, unsigned char lsb){
//shift the MSB left by 8 bits and OR with LSB
return ((short)msb<<8)|(short)lsb;
}

设备中的实际数据是big Endian格式的,所以我读取了两个字节并将它们组合起来得到二进制补码形式的真实值。但是,当我将数据输出到控制台时,例如:

cout << combineRegisters(registerA, registerB) << endl;

C++ 自动给我带有适当加号/减号的整数值。我没有指定我从设备获得的二进制值是二进制补码形式。

怎么样?这是否意味着 C++ 读取二进制值并假定它们是二进制补码格式?

最佳答案

ostream::operator<<()在编译时检测参数类型 - 在您的情况下 short .这是一个有标志的类型,所以你可以做两件事

函数返回值

cout << static_cast<unsigned short>(combineRegisters(registerA, registerB)) << endl;

或者修改函数本身

unsigned short MPU9250::combineRegisters(unsigned char msb, unsigned char lsb) {
//shift the MSB left by 8 bits and OR with LSB
return (static_cast<unsigned short>(msb << 8) | static_cast<unsigned short>(lsb);
}

我推荐第二种变体,因为您无意从 MPU9250::combineRegisters 返回负值功能。

关于c++ - 默认情况下,C++ 是否将二进制数读取为二进制补码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43169220/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com