1 Востаннє редагувалося Komiks (22.11.2013 12:51:11)

Тема: Допоможіть,будь ласка

Є таке завдання:

Написати функцію, яка повертає число, одержане з цілого числа x, в
якому інвертовані n розрядів, починаючи з позиції p, а решта розрядів
залишені без змін (крайній правий біт вважати нульовим за номером).
Перевіряти правильність значень n і p

Ніяк не можу зрозуміти,що треба зробити;( Допоможіть з кодом,будь ласка.

2

Re: Допоможіть,будь ласка

Приплюсуйте бітову маску до нього та й все (В залежності від n своя маска) (плюсувати у сенсі AND)

3 Востаннє редагувалося Komiks (22.11.2013 13:01:53)

Re: Допоможіть,будь ласка

Вибачте,але я вчуся на першому курсі і тільки-тільки почав вивчати програмування і нічого не зрозумів з того,що ви надрукували) Я вже навчився писати програми з case, while , if else. А це наступне завдання і я зовсім не розумію, що треба робити. І не розумію,що за маска така. І  AND

4

Re: Допоможіть,будь ласка

Тоді просто скористайтесь гугльом http://www.cyberforum.ru/cpp-beginners/ … 21504.html

Подякували: Komiks1

5

Re: Допоможіть,будь ласка

Якщо ви навіть умову не можете зрозуміти, то нащо вам код? Його ви зрозумієте ще гірше. Давайте я вам краще поясню умову: у нас є ціле число в двійковому форматі (якщо біт - це розряд, то формат двійковий), наприклад

11101010 10111101 01101111 10000101
                                  ^
                                  0-й розряд

Вас просять інвертувати (замінити 1 на 0, а 0 на 1) частину числа з n розрядів, починаючи з p-го, тобто якщо у нас число

11101010 10111101 01101111 10000101
                        ^       ^ 
                        p+n    p-й розряд

p=2, n=8, то з нього треба зробити

11101010 10111101 01101100 01111001
                        ^       ^ 
                        p+n    p-й розряд
Подякували: Chemist-i, Komiks2

6

Re: Допоможіть,будь ласка

Пане Chemist-i, і чим AND-маска допоможе, крім як погасить частину розрядів? Тут XOR потрібен.
Пане Komiks, мова йде про те, що в більшості сучасних мов програмування є бітові операції. В C-подібних мовах це & - AND, | - OR, ^ - XOR, ~ - NOT.

Подякували: Komiks1

7

Re: Допоможіть,будь ласка

koala написав:

Пане Chemist-i, і чим AND-маска допоможе, крім як погасить частину розрядів? Тут XOR потрібен.
Пане Komiks, мова йде про те, що в більшості сучасних мов програмування є бітові операції. В C-подібних мовах це & - AND, | - OR, ^ - XOR, ~ - NOT.

Так, треба XOR, визнаю, я трохи помилився

Подякували: Komiks1

8

Re: Допоможіть,будь ласка

koala написав:

Якщо ви навіть умову не можете зрозуміти, то нащо вам код? Його ви зрозумієте ще гірше. Давайте я вам краще поясню умову: у нас є ціле число в двійковому форматі (якщо біт - це розряд, то формат двійковий), наприклад

11101010 10111101 01101111 10000101
                                  ^
                                  0-й розряд

Вас просять інвертувати (замінити 1 на 0, а 0 на 1) частину числа з n розрядів, починаючи з p-го, тобто якщо у нас число

11101010 10111101 01101111 10000101
                        ^       ^ 
                        p+n    p-й розряд

p=2, n=8, то з нього треба зробити

11101010 10111101 01101100 01111001
                        ^       ^ 
                        p+n    p-й розряд

Якщо я візьму число 23,то у двійковій системі це буде 10111. І якщо n= 3,а р=4 ,то буде 10000?

9

Re: Допоможіть,будь ласка

Komiks написав:


Якщо я візьму число 23,то у двійковій системі це буде 10111. І якщо n= 3,а р=4 ,то буде 10000?

Ні. Інвертуємо розряди 3-го по 6-й:

Число:   00010111
Роздяди: 76543210
          ^  ^
Інверсія:01101111

10 Востаннє редагувалося koala (29.11.2013 21:10:00)

Re: Допоможіть,будь ласка

koala написав:
Komiks написав:


Якщо я візьму число 23,то у двійковій системі це буде 10111. І якщо n= 3,а р=4 ,то буде 10000?

Ні. Інвертуємо розряди 3-го по 6-й:

Число:   00010111
Роздяди: 76543210
          ^  ^
Інверсія:01101111

Вийшло 01101111.

Подякували: Komiks1