[C/C++] ЗАДАНИЯ

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Fata1ex, 21 Jun 2009.

  1. rudvil

    rudvil Elder - Старейшина

    Joined:
    25 Aug 2008
    Messages:
    200
    Likes Received:
    29
    Reputations:
    0
    Извиняюсь за глупый вопрос, но что делает эта единица в конце?
    Code:
    bool data7:1;
    Ведь таким же образом наследуют структуры и классы, а тут мистическая цифра "1" =/
     
  2. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    это значит что ты эта переменная будит занимать 1 бит.
    И по этому конструкция в структуре типа
    bool data1:1;
    bool data2:1;
    bool data3:1;
    bool data4:1;
    bool data5:1;
    bool data6:1;
    bool data7:1;
    bool data8:1;
    тудет занимать 1 байт
     
    2 people like this.
  3. rudvil

    rudvil Elder - Старейшина

    Joined:
    25 Aug 2008
    Messages:
    200
    Likes Received:
    29
    Reputations:
    0
    Интерестно, спасибо.
     
  4. jawbreaker

    jawbreaker Elder - Старейшина

    Joined:
    7 Jul 2008
    Messages:
    156
    Likes Received:
    76
    Reputations:
    3
    Ну видимо B::Foo, n = 10 потому что значение по умолчанию будет взято из другой функции?
     
  5. desTiny

    desTiny Elder - Старейшина

    Joined:
    4 Feb 2007
    Messages:
    1,006
    Likes Received:
    444
    Reputations:
    94
    ок, так:
    Code:
    struct _REC
     {
    	unsigned data1:16;
    	unsigned data2:16;
    	unsigned data3:16;
    	unsigned data4:1;
        unsigned data5:1;
        unsigned data6:1;
        unsigned data7:1;
        unsigned data8:1;
    } REC;
    //его почему-то short смущал
     
    1 person likes this.
  6. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    2 desTiny Это правильный, но некрасивый способо. Есть более красивый и удобный)
     
  7. Fata1ex

    Fata1ex Elder - Старейшина

    Joined:
    12 Dec 2006
    Messages:
    703
    Likes Received:
    300
    Reputations:
    38
    Спасибо всем, кто поддержал тред. Обновил первый пост: есть нерешенные задачи!
     
    1 person likes this.
  8. Lee_fx

    Lee_fx Elder - Старейшина

    Joined:
    27 Sep 2008
    Messages:
    90
    Likes Received:
    14
    Reputations:
    0
    Code:
    void display(int in) {
         // What im doing here????????/
    cout << ++in;
    }
    
    void foo() {
        int a=10;
        display(a);
    }
    Ничего не выведет, ??/ - триграф = \(конкатенация), в итоге получится функция void display(int in) {}
     
  9. Lee_fx

    Lee_fx Elder - Старейшина

    Joined:
    27 Sep 2008
    Messages:
    90
    Likes Received:
    14
    Reputations:
    0
    Code:
    class SimpleClass {
    		private:
    			int a;
    			int b;
    		public:
    			SimpleClass(int x) : b(x), a(b) {}
    			void print() {
    				std::cout << "a=" << a << " b=" << b << std::endl;
    			}
    	};
    
    	int main() {
    		SimpleClass a(42);
    		a.print();
    	return 0;
    }
    Насколько помню тут первой инициализируется переменная a, так как стоит первая в объявлении в private и инициализируется соответственно мусором из b. Короче SimpleClass(int x) : b(x), a(b), порядок b(x), a(b) или a(b), b(x) не важен.
     
  10. Fata1ex

    Fata1ex Elder - Старейшина

    Joined:
    12 Dec 2006
    Messages:
    703
    Likes Received:
    300
    Reputations:
    38
    Немного поправлю:
    Списки инициализаторов инициализируют члены данных в порядке их следования в определении класса. Отсюда проблемы = )
    Решения приняты )
     
  11. desTiny

    desTiny Elder - Старейшина

    Joined:
    4 Feb 2007
    Messages:
    1,006
    Likes Received:
    444
    Reputations:
    94
    разумеется, он убогий) как и вся идея сожрать 4 байта

    Кстати, мой VS сказал про него "8 байт". и про такое тоже:
    Code:
    struct _REC
     {
    		 unsigned short a,b,z;
    	 	 bool c:1,d:1,e:1,f:1,g:1;
    } REC;
    
     
  12. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    Вижу что мало кто юзает данный способ по этому напишу правильный ответ сам )
    Это директивы компилятора, которые на время могут менять выравнение структур.
    Подефолту выравнение идет на 4 байта. т.е. если структура будет 9 байт, то выравнеется на 12.
    #pragma pack(1) - выравнение 1 байт
    #pragma pack() - дефолтовое выранение. вот и выходит код типа

    #pragma pack(1)
    struct .....
    #pragma pack()
     
    #32 slesh, 22 Jun 2009
    Last edited: 22 Jun 2009
  13. Fata1ex

    Fata1ex Elder - Старейшина

    Joined:
    12 Dec 2006
    Messages:
    703
    Likes Received:
    300
    Reputations:
    38
    Кстати, одним из решений другого задания (5) тоже были директивы и никто не написал :(
    Забыли их, бедняжек (
    Added: перечитал пару статей: действительно, скорость при использовании прагм компилятора падает. Иногда значительно.
     
    #33 Fata1ex, 22 Jun 2009
    Last edited: 23 Jun 2009
  14. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    А вешь очень удобная для оптимизации работы программы.
    А если писать свой клиент-сервер которые общаются по своему протоколу, то такое просто необходимо юзать для снижения трафа
     
    1 person likes this.
  15. Fata1ex

    Fata1ex Elder - Старейшина

    Joined:
    12 Dec 2006
    Messages:
    703
    Likes Received:
    300
    Reputations:
    38
    Вообще это можно использовать не только в сетевых приложениях, а везде ) Лишних пару сэкономленных байт еще никому не мешали.
    Added: перечитал пару статей: действительно, скорость при использовании прагм компилятора падает. Иногда значительно.
     
    #35 Fata1ex, 22 Jun 2009
    Last edited: 23 Jun 2009
  16. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    Кстати не всегда это делать желательно, потому как бываются случае что
    адрес переменной должен быть выравнен на 4 байта иначе будет ошибка.
    Такое встречается в некоторых WinAPI функцих которые просто убивают приложение если адрес буфера не выравненн на 4 байта
     
  17. Ra$cal

    Ra$cal Elder - Старейшина

    Joined:
    16 Aug 2006
    Messages:
    670
    Likes Received:
    185
    Reputations:
    78
    это еще приводит к замедлению работы, ибо обращение к невыравненной ячейке памяти дает штраф

     
  18. Fata1ex

    Fata1ex Elder - Старейшина

    Joined:
    12 Dec 2006
    Messages:
    703
    Likes Received:
    300
    Reputations:
    38
    Добавил несколько несложных задачек. Не решены задания 2, 9, 10, 11, 12, 13, 14.
    С радостью выслушаю любые ваши предложения и замечания )
     
  19. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    здание 12 хочу решить так ))

    Code:
    int a = 0;
    char * k = str;
    while (k[0])
     {
       a += k[0];
       k++;
     }
    
     
    1 person likes this.
  20. Fata1ex

    Fata1ex Elder - Старейшина

    Joined:
    12 Dec 2006
    Messages:
    703
    Likes Received:
    300
    Reputations:
    38
    Нужно отредактировать исходный код )) Хотя твоя версия, безусловно, верна.