Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
操作员是如何工作的? 我对C++中的操作符感到困惑。我有代码来传输从MCU读取的数据。高8位与低8位分开。数据(代码中的BUF)存储补码。所以我使用(BUF[1]_C++_Bit Manipulation - Fatal编程技术网

操作员是如何工作的? 我对C++中的操作符感到困惑。我有代码来传输从MCU读取的数据。高8位与低8位分开。数据(代码中的BUF)存储补码。所以我使用(BUF[1]

操作员是如何工作的? 我对C++中的操作符感到困惑。我有代码来传输从MCU读取的数据。高8位与低8位分开。数据(代码中的BUF)存储补码。所以我使用(BUF[1],c++,bit-manipulation,C++,Bit Manipulation,不能左移负数,这样做会调用未定义的行为:任何事情都可能发生。同样,右移负数也是一个坏主意,因为这可能导致算术或逻辑右移 必须将变量强制转换为无符号类型、shift,然后再转换回。例如: d1 = ((uint32_t)BUF[1] << 8) ... d1=((uint32_t)BUF[1]左移负数的行为是未定义的,在C++14之前,有符号字符(从C++14有符号字符和字符如果有符号必须是2的补码)很容易受到不同补码方案的影响 为了轻松的生活,只需写作 BUF[1] * 256 +

不能左移负数,这样做会调用未定义的行为:任何事情都可能发生。同样,右移负数也是一个坏主意,因为这可能导致算术或逻辑右移

必须将变量强制转换为无符号类型、shift,然后再转换回。例如:

d1 = ((uint32_t)BUF[1] << 8) ...

d1=((uint32_t)BUF[1]左移负数的行为是未定义的,在C++14之前,有符号字符
(从C++14
有符号字符
字符
如果有符号必须是2的补码)很容易受到不同补码方案的影响

为了轻松的生活,只需写作

BUF[1] * 256 + BUF[0]

注意到这个表达式的类型是<代码> int <代码> .< /p>首先要知道你在编程的编程语言…这不是C,而是C++。<代码>(2)也不存在把一个8位元素移8位的问题(除非这是一个奇特的9位字符系统)?@ChristianGibbons操作数被提升为

int
@molbdnilo我想我也应该这么做。总有一天我会更好地了解整数提升发生的时间。谢谢你的回答。在我的电脑(windows 10,Visual Studio 2015 v140 x64)中,
BUF[1]*256+BUF[0]
获取
111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111。
BUF[1] * 256 + BUF[0]