Ваша реклама могла б бути тут!
1 млн переглядів на місяць!
Google Page Rank: 5

Нужен учебник по C+

🟡 13:04 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
Статус: Offline
Реєстрація: 04.03.2009
Повідом.: 122
  • 🟡 13:04 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #1
Нужен учебник по C++

Ребята! Я не хочу отягощать вас глупыми вопросами, но лишь прошу подсказать литературу (ЖЕЛАТЕЛЬНО в электр. виде), где я могу прочитать конкретней про операторы & && % << >> и т.п., а также про типы данных и конвертирование, упаковку, распаковку данных.

Очень надо изучить тип данных DWORD!

Только предложения типа "взломай базу данных google" мне не помогут.
 
  • 🟡 13:04 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #2
Bruce Eckel "Thinking in C++" 2хтомник как учебник по C++. По-русски, вроде, "Философия C++".

DWORD - это целый тип двойное слово под Windows, размерность зависит от архитектуры. Это уже нужно читать книги не по C++, а по Win API. Кстати, программирование в Win API - это не C++, а C.

Операторы - побитовое и логическое И, остаток от деления, побитовый сдвиг влево и вправо соответственно.
 
  • 🟡 13:04 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #3
Спасибо большое!

Впринципе как раз операнды я смотрел в учебнике, но встретился с проблемой в программе, решение которой я не нашел в учебнике.

Мне нужно было из DWORD-а выделить поочерезно 3 байта и преобразовать их значение в тип байт.

В исходниках я увидел манипуляции с ">> 8", "<<", "& 0xff".

А про Win API спс.

Я тогда поищу книги по Win API.
 
  • 🟡 13:04 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #4
Например:
DWORD a ;
...
DWORD a1 =a&0xff;
Ты сохраняешь в переменной a1 младший байт переменной a. 0xff - битовая маска из восьми двоичных единиц (255 - максимальное число, которое может храниться в беззнаковом байте).
Далее:
a >>= 8;
или
a = a>>8;
или
a/= 0x100;
или
a = a/256;
Последствия этих дествий - одни и те же. Ты делишь переменную a на 256 и присваиваешь ей новое значение. Этим ты отбрасываешь младший байт. Или попросту сдвигаешь значение побитово вправо, отбрасывая ненужные 8 бит.
После этого опять
DWORD a2 =a&0xff;
Сохраняешь в переменной a2 значения младших 8 бит a.
И опять сдвигаешь пременную a, и опять сохраняешь, чтобы получить третий байт.
В конце-концов
BYTE b1 = a1, b2 = a2, b3 = a3;

А можно всё сделать ещё проще:
DWORD a;
...
BYTE* pb = &a;
BYTE b1, b2, b3
b1 = pb[0];
b2 = pb[1];
b3 = pb[2];
Примерно так. Т.е. присваиваешь указателю на массив байт адрес переменной a, после чего берёшь значения из элементов массива.
 
  • 🟡 13:04 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #5
<< - сдвижка влево на заданное число бит (без переноса)
>> - сдвижка вправо на N бит (без переноса)
& - побитовое И
| - побитовое ИЛИ
^ - побитовое ИСКЛЮЧАЮЩЕЕ ИЛИ
~ - побитовое НЕ
DWORD - к C++ и к C не имеет никакого отношения, это Win API. Означает двойное слово, аналог Int32
 
  • 🟡 13:04 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #6
А можно всё сделать ещё проще:
DWORD a;
...
BYTE* pb = &a;
BYTE b1, b2, b3
b1 = pb[0];
b2 = pb[1];
b3 = pb[2];
Примерно так. Т.е. присваиваешь указателю на массив байт адрес переменной a, после чего берёшь значения из элементов массива.

Попроще не вышло...
Компилятор не может сконвертировать DWORD * в BYTE *.

А вот первый вариант прошел...

Спасибки!

Я, кстати делал "вслепую" что-то похожее и результаты были правильными только для первого байта.

А сейчас для всех!

я просто распаковал сообщение 0х00909090

и получил заветные 144 144 144!

Спасибо большое, а учебник я все-таки поищу - плохо жить в неведении.
 
  • 🟡 13:04 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #7
Я понял. Да, я прогнал. Но можно так:
BYTE* pb = (BYTE*)((void*)(&a));
Этот грязный хак должен прокатить. ))) Любой тип указателя можно перегнать в void*, а потом в любой другой тип указателя.

Удачи! Кстати, я учил Win API по Финогенову. Общее представление даёт. А ещё есть Харт, "Системное программирование в среде Windows", но там упор именно на системные возможности, и все программы консольные. Найдёшь в электронке - посмотри. А Финогенов даёт примеры графического интнрфейса в Win API. Ещё есть Джеффри Рихтер, но его я не читал.
 
  • 🟡 13:04 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #8
  • 🟡 13:04 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #9
  • 🟡 13:04 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #10
Посилання видалено
:)
 
  • 🟡 13:04 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #11
Спасибо всем, ребята. Кстати про void * я тоже не подумал :)

Я читал про всё это. Литературы у меня достаточно, просто я, если честно думал, что DWORD - это относится к синтаксису C++, поэтому и спросил совета.

Про логические ф-нкции я еще в детстве читал - сейчас забыл все.

Я вообще не программист, - решил написать программу на основы мультимедийной подсистемы midi, - просто моих знаний в области программирования до этого момента хватало...

Сейчас у меня хоть представление есть о том, что я спрашивал...

Вообщем спасибо!
 
  • 🟡 13:04 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #12
Раз решил то что хотел, тему хотя бы для приличия закрой :)
 
Назад
Зверху Знизу