C++动操作<<和>>,是逻辑数字达到的活动(和多头小端无关)

  • 问题讲述

       这几乎龙帮忙同事调试DSP TMS320F28335,这不行东西蛋疼死了。char是16bit的,16员即是他的卓绝小内存单首先。而PC机串口发过来的出8bit之数码,然后换就来题目。

        一开免亮堂char是16bit,让UInt32 * a直接当char
b[4],然后中间出来好多0x00,这样的空位,比如实际上b=0x00EE00FF00550001,而我们觉得b=0xEEFF5501,但实际上a=0x00EE00FF。然后我们尽管想把char里面的空值通过走去丢。

       
但是及时以为运动是物理内存上的左移、右变,即28335是big_endian,位移是倒的,比如0x005C
,内存结构是5C 00 ,然后右变8bit,我觉得得到的是初内存结构是00
5C,但实际上值是0x0000。这就生出好挺题材了。

        电脑作了一个uint32 value=1500=0x000005DC

        然后DSP串口接收到之unsigned char buff[]={00DC 0005 0000
0000};

        错误的转换unsigned char c[]={DC05 0000
},即c[0]=(buff[0]<<8) | buff[1]

        正确的转换unsigned char c[]={05DC 0000 },即c[0]=buff[0])|
(buff[1]<<8)

  • 题材总

        C\C++中之移位操作,是真物理C++内存上的左移、右变,还是逻辑数字上之运动?

        比如一个4字节底int值:0x000000ff。在big_endian和little_endian机器上之字节顺序是倒转的,但是,不管是什么的机器,你左移8个bit之后,值总是0x0000ff00。

        物理内存只是一个保留数据的事物,具体的操作是由CPU执行之。假设一个多少在大体内存上,为了活动,我们先是将它们取出来CPU里,不管她在内存里是啊办法,在CPU里都可当她是一模一样的。