Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562

Как гарантировать, что сдвиг не будет циклическим?

28.12.2012, 13:29. Показов 764. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
C++
1
2
3
4
5
const uint8_t  *Source;
...
       uint8_t  *Target;
...
*Target=*Source<<BiteShift;
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.12.2012, 13:29
Ответы с готовыми решениями:

Гарантировать что упорядоченная по убыванию последовательность не будет начинаться с 0
Здравствуйте, как добавить условие того что упорядоченная по убыванию последовательность не будет начинаться с 0. Sample Input 7 ...

Что будет происходить с целым числом без знака, если для него выполнить сдвиг вправо на 2 бита?
Что будет происходить с целым числом без знака, если для него выполнить сдвиг вправо на 2 бита? Приведите пример.

Гарантировать, что данные от сервера
Допустим имеется веб-приложение: Где-то на сервере высчитывается зарплата пользователя. Он заходит под своим логином на страницу со...

13
 Аватар для cybersonner
98 / 49 / 4
Регистрация: 24.12.2011
Сообщений: 101
28.12.2012, 22:54
давай подробнее вопрос. совсем не понятно. у тебя обычный сдвиг. циклическим он стать вроде не может.
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
30.12.2012, 09:23  [ТС]
Так вроде по стандарту это не определено, сдвиг и всё, а какой не сказано.
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
30.12.2012, 09:52
Если правый операнд содержит отрицательное значение или его значение больше или равно количеству бит в левом операнде, то результат операции не определен.
Я когда писал класс длинной арифметики просто делал: сдвиг%кол-во_бит_в_элементе
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
30.12.2012, 09:55  [ТС]
А если он не превышает разрядность левого операнда, то сдвиг простой по стандарту?
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
30.12.2012, 10:03
Ну что-то вроде
C++
1
number<<(rhv%=sizeof(uint8_t));
0
545 / 344 / 12
Регистрация: 05.11.2010
Сообщений: 1,076
Записей в блоге: 1
30.12.2012, 12:52
Тебя интересует, не появятся ли лишние единицы на освободившихся позициях. Не появятся, иначе сдвиг был бы практически бесполезен.
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
30.12.2012, 12:57  [ТС]
Цитата Сообщение от Герц Посмотреть сообщение
Не появятся, иначе сдвиг был бы практически бесполезен.
В системе команд зачем то предусмотрено сразу четыре сдвига, если не шесть, но только два простых, остальные циклические. В данном случае нужен простой сдвиг, но разработчики компиляторов от меня не зависят.
0
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
30.12.2012, 13:09
taras atavin, я с вас поражаюсь.
Assembler
1
shl
Assembler
1
sal
неужели не знали?
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
30.12.2012, 13:25  [ТС]
Цитата Сообщение от go Посмотреть сообщение
Assembler
1
shl
Assembler
1
sal
тогда 5, или 7 в зависимости от наличия/отсутствия сдвигов через флаг.
0
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
30.12.2012, 13:32
Цитата Сообщение от taras atavin Посмотреть сообщение
тогда 5, или 7
Поясните
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
30.12.2012, 14:18  [ТС]
1. Правый простой логический.
2. Левый простой логический.
3. Правый простой арифметический.
4. Левый простой арифметический.
5. Правый циклический.
6. Левый циклический.
7. Правый циклический через флаг переноса.
8. Левый циклический через флаг переноса.
Итого 8, без сдвигов с участием флага 6, в первой четвёрке два сдвига совпадают. Получается 7, или 5.
0
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
30.12.2012, 15:17
taras atavin, я понял, что это бесполезно. Уточните задание, и я напишу код.
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
30.12.2012, 15:29  [ТС]
Что бесполезно? Доказывать, что циклических сдвигов не бывает? Объясни, что по-твоему означает мнемоника RAR. Мне надо гарантировать, что сдвиг циклическим не будет. Пока исходник оператора такой:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Longs         ::
TInteger
Longs         ::
TInteger      :: operator <<      (const        TInteger &Right ) const
{
 const uint8_t  *Source;
 const uint8_t  *SourceEnd;
 const uint8_t  *Next;
 const uint8_t  *RightByte;
       uint8_t  *Target;
       uint8_t  *TargetEnd;
       TInteger  Result;
       size_t    Shift;
       size_t    ByteShift;
       size_t    BiteShift;
       uint8_t   Buffer;
       uint8_t   Masks[2];
 if (((*Right.Data)&0x80)==0x80)
 {
  return *this>>-Right;
 }
 for (RightByte=Right.Data+0xFB; RightByte>=Right.Data; --RightByte)
 {
  if ((*RightByte)!=0x00)
  {
   for (Target=Result.Data+0xFF; Target>=Result.Data; --Target)
   {
    *Target=0x00;
   }
   return Result;
  }
 }
 Shift=(int32_t)Right;
 if (Shift==0x00000000)
 {
  return *this;
 }
 ByteShift=Shift/8;
 BiteShift=Shift%8;
 if (ByteShift>=0x100)
 {
  for (Target=Result.Data+0xFF; Target>=Result.Data; --Target)
  {
   *Target=0x00;
  }
  return Result;
 }
 Masks[0]=(uint8_t)((0xFF)<<BiteShift);
 Masks[1]=~Masks[0];
 for (Target=Result.Data, Source=Data+ByteShift, TargetEnd=Result.Data+0xFF-ByteShift, SourceEnd=Data+0xFF; Target<=TargetEnd; ++Target, ++Source)
 {
  Buffer=0x00;
  Buffer|=((*Source)<<BiteShift)&Masks[0];
  if ((BiteShift!=0)&&(Source<SourceEnd))
  {
   Next=Source+1;
   Buffer|=((uint8_t)(((((uint16_t)(*Next))<<BiteShift)&0xFF00)>>8))&Masks[1];
  }
  *Target=Buffer;
 }
 for (TargetEnd=Result.Data+0xFF; Target<=TargetEnd; ++Target)
 {
  *Target=0x00;
 }
 return Result;
}
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
. Надо гарантировано не циклически двинуть число, представленное массивом цифр в системе с основаниями 2 и 256, двигать надо биты, игнорируя границы байт, слов и всего остального, кроме границ всего массива. Оператор используется в операторе двоичного деления.

Добавлено через 1 минуту
Поддерживать байты другого размера, кроме 8-ми бит не нужно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.12.2012, 15:29
Помогаю со студенческими работами здесь

Как гарантировать поочередное выполнение потоков?
есть задача с очередью, там надо поочередно выполнять в отдельном потоке кое что. я использую ExecutorService, там легко задавать...

Как гарантировать передачу единственного параметра через стек?
Как гарантировать передачу единтсвуенного параметра функции в виндузячем x64 приложении через стек? Какое соглашение можно для этого...

Как гарантировать целостность изменений файлов при обновлении
Есть приложение, у которого имеется несколько конфигурационных текстовых файлов. Внесение изменений хоть в один файл конфигурации...

Численное интегрирование (метод трапеций). Как гарантировать нужную точность?
#include &lt;cmath&gt; #include &lt;iostream&gt; #define PI 3.1415926535 /*----подинтегральная функция---*/ static double INTEGR(const...

Найти вероятность того, что стрелы упадут так, что землю можно будет поделить способом (как на рисунке)
Помогите, пожалуйста! Задача: У царя 3 сына. Царь состарился и решил отойти от дел и разделить царство между тремя сыновьями и сделал...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США. Нашел на реддите интересную статью под названием «Кто-нибудь знает, где получить бесплатный компьютер или. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru