C ++ Shift Bits

I'm new to bit offsets, but I'm trying to debug the following snippet:

if (!(strcmp(arr[i].GetValType(), "f64")))
 {
        dem_content_buff[BytFldPos] = tmp_data;
     dem_content_buff[BytFldPos + 1] =  tmp_data >> 8;
     dem_content_buff[BytFldPos + 2] = tmp_data >> 16;
     dem_content_buff[BytFldPos + 3] = tmp_data >> 24;
     dem_content_buff[BytFldPos + 4] = tmp_data >> 32;
     dem_content_buff[BytFldPos + 5] = tmp_data >> 40;
     dem_content_buff[BytFldPos + 6] = tmp_data >> 48;
     dem_content_buff[BytFldPos + 7] = tmp_data >> 56;
        }    

I get a warning that lines from "32" to "56" have too much shift. "F64" in the predicate simply means that the data must be 64-bit data.

How to do it?

edit:

I should have added more code.

tmp_data = simulated_data[index_data];

if (!(strcmp(dems[i].GetValType(), "s32")))

{dem_content_buff [BytFldPos] = tmp_data; dem_content_buff [BytFldPos + 1] = tmp_data โ†’ 8; dem_content_buff [BytFldPos + 2] = tmp_data โ†’ 16; dem_content_buff [BytFldPos + 3] = tmp_data โ†’ 24;
 }

if (! (strcmp (dems [i].GetValType(), "f64" )))  {       dem_content_buff [BytFldPos] = tmp_data;    dem_content_buff [BytFldPos + 1] = tmp_data โ†’ 8;    dem_content_buff [BytFldPos + 2] = tmp_data โ†’ 16;    dem_content_buff [BytFldPos + 3] = tmp_data โ†’ 24;    dem_content_buff [BytFldPos + 4] = tmp_data โ†’ 32;    dem_content_buff [BytFldPos + 5] = tmp_data โ†’ 40;    dem_content_buff [BytFldPos + 6] = tmp_data โ†’ 48;    dem_content_buff [BytFldPos + 7] = tmp_data โ†’ 56;  }

, dem_content_buff ints. 64- ?

+3
4

, tmp_data 64 , , , .

. , , demp_content_buff unsigned char * unsigned char [].

:

if (!(strcmp(arr[i].GetValType(), "f64")))
    {
        dem_content_buff[BytFldPos] =  ( tmp_data & 0xff );
        dem_content_buff[BytFldPos + 1] =  (tmp_data >> 8 ) & 0xff ;
        dem_content_buff[BytFldPos + 2] =  (tmp_data >> 16) & 0xff ;
        dem_content_buff[BytFldPos + 3] =  (tmp_data >> 24) & 0xff;
        dem_content_buff[BytFldPos + 4] =  (tmp_data >> 32) & 0xff;
        dem_content_buff[BytFldPos + 5] =  (tmp_data >> 40) & 0xff;
        dem_content_buff[BytFldPos + 6] =  (tmp_data >> 48) & 0xff;
        dem_content_buff[BytFldPos + 7] =  (tmp_data >> 56) & 0xff;
        }   
+1

tmp_data?

, tmp_data - 32 , , . 64- int, ( ) unsigned long long.

+2

, 32 , tmp_data 64- - .

However, you would also like it to simulated_databe an array of some 64-bit type, otherwise tmp_datait will always be zero (or an icon-extended set of bits 1) in the most significant bits when you assign its original value:

tmp_data = simulated_data[index_data];
+1
source

If you are using Visual Studio, make sure you define tmp_data as:

__int64 tmp_data;              // Visual studio version

instead

unsigned long long tmp_data;   // GCC version
+1
source

Source: https://habr.com/ru/post/1737033/


All Articles