Как переписать один бит в другой? В Си.

Модератор: Злобный

Ответить
Аватара пользователя
Kria
Юзер
Сообщения: 129
Зарегистрирован: Чт авг 04, 2005 13:07
Откуда: Кишинёв

Как переписать один бит в другой? В Си.

Сообщение Kria »

Как переписать один бит в другой? В Си.
допустим переписать третий бит в первый.
Аватара пользователя
Злобный
Завсегдатай
Сообщения: 2716
Зарегистрирован: Сб июн 18, 2005 21:05
Контактная информация:

Сообщение Злобный »

Есть такая операция: OR. Почитай по ней хелп. В си оператор "|", если мне никто не изменяет... Делаешь OR на свою переменную маской, где только 3-й бит равен 1. Это чтобы выставить его в 1. Чтобы сбросить в 0, надо сделать AND (&) с маской, где все биты, кроме 3-го равны 1.
Аватара пользователя
Kria
Юзер
Сообщения: 129
Зарегистрирован: Чт авг 04, 2005 13:07
Откуда: Кишинёв

Сообщение Kria »

Блин как всегда! Недоконца объяснил!
я понятия не имею как работать с битами!
Как их задавать и вообще что они собой представляют!

2Злобный
Всё что ты там написал мне кажется немножко дя другого уровня!
Я конечно ща хэлп проштудирую! Но не знаю что из этого получится!
Аватара пользователя
Злобный
Завсегдатай
Сообщения: 2716
Зарегистрирован: Сб июн 18, 2005 21:05
Контактная информация:

Сообщение Злобный »

Kria,
Не помню, как в си объявлеятся 8-битовый инт. Если что, поменяешь, как нужно...

short int a = 15;
short int mask = 0x20; // 00100000b = 20h

//Установка 3-го бита в 1;
a = a | mask;

"До конца" в жизни тебе хер кто когда объяснит. Учись учиться. Как вы программируете, не зная, как хрянятся числа в памяти компьютера? Это на первых уроках давать должны были.
Аватара пользователя
Лютик
Старожил
Сообщения: 1459
Зарегистрирован: Чт авг 04, 2005 01:36
Контактная информация:

Сообщение Лютик »

Для "переписывания" тебе придется применить обе описанных Злобным операции - AND для получения значения третьего бита, AND для очистки первого и OR для установки первого.
Аватара пользователя
Kria
Юзер
Сообщения: 129
Зарегистрирован: Чт авг 04, 2005 13:07
Откуда: Кишинёв

Сообщение Kria »

Всем спасибо всё разобрался

int x = 0xF0;
x |= (1 << 3); x &= ~(1 << 6);

устанавливает в 1-ый бит 3-ий и сбрасывает в 0-ой бит 6-ой

[off]добавлено спустя 15 минут:[/off]

Может кто подскажит ответ на другой вопрос!

main()
{
unsigned short u=65535; /*16 bit: 0xFFFF*/
short d=u; /* 15 bit + знаковый бит */
printf("%X %d\n",d,d); /*FFFFFF -1*/
}

какого d стало отрицательным и почему %X печатает больше F чем в исходном коде?

Я понимаю что

интервал short -32768 > 32768
интервал unsigned short 0> 65535 за счёт того что знаковый бит используется под цифры, на почему ответ
FFFF -1 не понимаю
Аватара пользователя
Злобный
Завсегдатай
Сообщения: 2716
Зарегистрирован: Сб июн 18, 2005 21:05
Контактная информация:

Сообщение Злобный »

Kria,
Отрицательные числа пишутся в виде доп. кодов. Не так, как положительные... Почитай про хранение в памяти отрицательных чисел. Повторяю, у тебя нет базовых знаний... Их сначала получи.
Ваганыч
Юзер
Сообщения: 176
Зарегистрирован: Пт янв 21, 2005 04:42
Откуда: Кишинев
Контактная информация:

Сообщение Ваганыч »

Kria,
Дай угадаю:
Политех. Факультет CIM. 2 курс. Фалько раздал вопросы из Богатырева для промежутки.
Я прав ? :))))

вот про ДК(там же по ссылкам про ПК и ОК):
http://ru.wikipedia.org/wiki/%D0%94%D0% ... 0%BE%D0%B4

[off]добавлено спустя 3 минуты:[/off]

UPD: мда.. по ссылкам про ПК и ОК ничего не сказано :(
подойди к преподу по ASDN в политехе и попроси шоб объяснила :)
Аватара пользователя
Kria
Юзер
Сообщения: 129
Зарегистрирован: Чт авг 04, 2005 13:07
Откуда: Кишинёв

Сообщение Kria »

=) Почти! угадал!
Я все вопросы решил! Вот в этот не врубаюсь, лучше бы мне работу с файлами дали!
Знакомая у меня на 2 курсе в политехе! Попросила помоч! А я ща дома сижу делать нефиг вот и развликаюсь!
Ваганыч
Юзер
Сообщения: 176
Зарегистрирован: Пт янв 21, 2005 04:42
Откуда: Кишинев
Контактная информация:

Сообщение Ваганыч »

main()
{
unsigned short u=65535; /*16 bit: 0xFFFF*/
short d=u; /* 15 bit + знаковый бит */
printf("%X %d\n",d,d); /*FFFFFF -1*/
}
Происходит вот что(по крайней мере мне так кажется :) )
u: 16 бит установлены в 1.
d: 15 бит устанорвлены в 1 и старший(знаковый) тоже в 1. Получается типа отрацательное число. Но в компе отрицательный числа хранятся в виде дополнительного кода. Для того чтобы его получить надо инвертировать и прибавить 1. Таким образом:
d: 1111111111111111 (ПК)
d: 1000000000000001 (ДК) == -1

вроде так.
Ответить

Вернуться в «Программирование»