вызов по сслыке
От: i.dmitry  
Дата: 16.01.10 21:00
Оценка:
Прошу помощи.
1)Не понимаю почему значение переменной val, после выплнения функции find_0x7e не изменяется?

Ведь передаю параметр в нее по ссылке.

2)Есть ли способ в переменну типа char записать старшие 8 бит переменной типа инт?


char data;

data = val; // в этом случае записывается младший байт



// вывод двоичного представления числа типа int
void print_bin (int num)
{
    for (int i = 0; i < sizeof(int)*8; i++)
    {
        if ((num<<i) & 0x80000000)
            printf("1");
        else
            printf("0");
    }
    printf("\n");
}

// поиск флага 0x7E. После выполнения функции, в старшем байте будет 0x7e
void find_0x7e (int *num)
{
    int i = 0;
    while ( ((*num << i++) & 0x7e000000) != 0x7e000000 );        
}
        
int main(int argc, char *argv[]) 
{
    
    int val = 0x00003f55;
    char data = 0;

    printf("val = 0x%x\n", val);
    print_bin(val);

    find_0x7e(&val);
    print_bin(val);

    return 0;
}
Re: вызов по сслыке
От: savitar  
Дата: 16.01.10 21:34
Оценка:
Здравствуйте, i.dmitry, Вы писали:

ID>...


1) потому что новое значение нигде не присваивается, лишь используется значение для вычисления выражения, и то как она передана в ф-цию в данном случае роли не играет, и в данном случае это не ссылка, а указатель.
2) data = val >> 24; если не заморачиваться с платформами и битностью.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.