我需要连接一些按位运算,但是当前输出似乎是错误的。拆分后的操作与此类似:
unsigned char a = 0x12
unsigned char x = 0x00;
x = a << 4;
x = x >> 4;
预期结果x = 0x02; 当前结果x = 0x02;
如果我尝试串联操作,则结果不正确:
unsigned char a = 0x12
unsigned char x = 0x00;
x = (a << 4) >> 4;
预期结果x = 0x02; 当前结果x = 0x12;
预先感谢您的任何建议。
答案 0 :(得分:7)
unsigned char a = 0x12;
unsigned char x = 0x00;
x = static_cast<unsigned char>(a << 4) >> 4;
问题在于(a << 4)
被强制转换为int,因此(0x12 << 4) >> 4
本质上是0x12
请参阅https://en.cppreference.com/w/cpp/language/implicit_conversion#Integral_promotion
答案 1 :(得分:2)
编译器未对>>和<<操作
应用积分促销您可能会认为
0 1
0 0 01-01-84
1 1 31-07-85
2 2 24-08-85
3 3 30-12-93
4 4 09-12-77
5 5 08-09-90
6 6 01-06-88
7 7 04-10-89
8 8 15-11-91
9 9 01-06-68
pd.to_datetime(data[1].apply(lambda x: '-'.join(x.split('-')[:-1] + ['19' + x.split('-')[2]])))
0 1984-01-01
1 1985-07-31
2 1985-08-24
3 1993-12-30
4 1977-09-12
5 1990-08-09
6 1988-01-06
7 1989-04-10
8 1991-11-15
9 1968-01-06
Name: 1, dtype: datetime64[ns]
将使用一个字节宽的寄存器进行操作,但是编译器在进行移位之前将char a提升为一个int,并保留向左移位的位。
您可以通过以下方法解决此问题:
x = (a << 4) >> 4;
同样,问题在于积分提升会保留位,直到最终转换为止。