Я использовал переменную size_t, чтобы помочь мне сделать мой проект.Однако, это работает не во всех случаях, которые я хочу, и я действительно не знаю, в чем проблема.
Я использую эту инструкцию для проверки битов из длинной карты без знака long, но когда переменная t
становится равной 1, а j
находится между 7 (1 * 8 -1) и 0 ((1 - 1) * 8), j
также получает значения -1, -2, -3, -4 и -5, даже если условие j >= (t - 1) * sizeof(unsigned long long)
, что для 't =1 'случай j >= 0
.Я действительно понятия не имею, почему я заменил для случая t = 1 size_t на int, но мне бы очень хотелось знать, почему это происходит, что я делаю неправильно и как я могу это исправить.
int t; //( it gets values between 8 and 1 )
...
for ( size_t j = t * sizeof(unsigned long long) - 1;
j >= (t - 1) * sizeof(unsigned long long);
j--) {
map_mask = help64 << j;
printf("%zd ",j); // that s how i figured out i get negative numbers
//checking bit by bit and return 0(not fitting) if we see any bit equal
if ( (map_mask & (*map)) == map_mask ) {
mask8 = help8 << k;
if ( (mask8 & p) == mask8 )
return 0;
}
k-- ;// a variable i used for the mask( i initiated it with k = 7, it doesnt matter here
}