Необходимо ли было когда-либо использовать бит, переключающий реальные проекты на нижний регистр?

В моей системе (Ubuntu 17.10) ваш пример работает по желанию, как при вводе из командной строки (в sh), так и при исполнении сценария sh:

[bash]§ sh
$ STR="Hello\nWorld"
$ echo $STR
Hello
World
$ exit
[bash]§ echo "STR=\"Hello\nWorld\"
> echo \$STR" > test-str.sh
[bash]§ cat test-str.sh 
STR="Hello\nWorld"
echo $STR
[bash]§ sh test-str.sh 
Hello
World

Я думаю, это отвечает на ваш вопрос: он просто работает. (Я не пытался разобраться в деталях, например, в какой момент точно замена подписи символа новой строки для \n происходит в sh).

Однако я заметил, что этот же скрипт будет вести себя по-другому при выполнении с bash и вместо этого распечатайте Hello\nWorld:

[bash]§ bash test-str.sh
Hello\nWorld

Мне удалось получить желаемый результат с помощью bash следующим образом:

[bash]§ STR="Hello
> World"
[bash]§ echo "$STR"

Обратите внимание на двойные кавычки вокруг $STR. Это ведет себя одинаково, если сохраняется и выполняется как сценарий bash.

Следующее также дает желаемый результат:

[bash]§ echo "Hello
> World"
79
задан 3 revs, 2 users 100% 8 February 2009 в 22:56
поделиться

40 ответов

Я все еще пишу код для систем, которые не имеют поддержки с плавающей точкой в аппаратных средствах. В этих системах Вам нужно смещение бита почти для всей Вашей арифметики.

Также Вам нужны сдвиги для генерации хешей. Полиномиальная арифметика (CRC, Коды Тростника-Solomon являются основными приложениями), или сдвиги использования также.

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

компиляторы обнаруживают случаи, где умножение может быть уменьшено до сдвига.

55
ответ дан 2 revs, 2 users 84% 6 November 2019 в 02:45
поделиться

Да, разрядное смещение используется во встроенном программном обеспечении низкого уровня все время. Это может также использоваться в качестве почти волшебного приема, чтобы выполнить чрезвычайно быстрые математические операции, взглянуть на телефон

http://betterexplained.com/articles/understanding-quakes-fast-inverse-square-root/

0
ответ дан Joonas Pulakka 6 November 2019 в 02:45
поделиться

Разрядное смещение также требуется при общении с "более низким уровнем" equiment, eq цифровой ethernet-IO - поля или PLC's, которые обычно упаковывают invidual значения ввода/вывода в байты.

0
ответ дан Harriv 6 November 2019 в 02:45
поделиться

Да, при выполнении двоичной коммуникации между Java и приложениями C#, каждый - порядок байтов с обратным порядком байтов, и другой прямой порядок байтов (не обязательно на этом порядке). Я создал класс InputStream, который мог считать числа с другим порядком байтов, и он использовал смещение байта для работы.

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

1
ответ дан Ravi Wallau 6 November 2019 в 02:45
поделиться

Я использую его в проекте для встроенной системы, которая должна считать данные монитора EDID. Некоторые данные в EDID кодируются как это:

Байт № 3:
Горизонтальное Очищение - понижаются на 8 битов
Байт № 4:
Более низкое Откусывание: Горизонтальное Очищение - верхние 4 бита
Верхнее Откусывание: что-то еще
1
ответ дан Tobias Klüpfel 6 November 2019 в 02:45
поделиться

Я использовал их на играх для упаковки набора флагов в единственный байт / символ для сохранения на карту данных. Вещи как хранение состояния unlockables и т.д. Не большая часть требования в наше время, но может сохранить работу.

1
ответ дан xan 6 November 2019 в 02:45
поделиться

Каждая пересылка-битовой-строки-er, которую я когда-либо писал, возможно, не была завершена w/o способность двигать левые и правые биты.

1
ответ дан Scott Evernden 6 November 2019 в 02:45
поделиться

Например, в реализации криптографических методов на языках, таких как C, C++. Двоичные файлы, алгоритмы сжатия и логические операции списков - битовая операция всегда хороши =)

3
ответ дан Anton 6 November 2019 в 02:45
поделиться

Разумная статья здесь: http://greatjustice.info/the-lost-art-of-bitmasks/

7
ответ дан Philip Reynolds 6 November 2019 в 02:45
поделиться

Я использовал их несколько раз, но в значительной степени всегда для парсинга формата двоичного файла.

9
ответ дан David Grant 6 November 2019 в 02:45
поделиться

Одно место я использую их все время, при перемещении порядка байтов целых чисел для межплатформенных приложений. Они также иногда пригождаются (наряду с другими операторами побитовой обработки) при блитировании 2D графики.

15
ответ дан MattK 6 November 2019 в 02:45
поделиться

Да, тем не менее это необходимо.

Здесь в моем задании, например, мы разрабатываем программное обеспечение для связи с PLC через последовательный порт COMx. Необходимо обработать биты в байте, мы используем сдвиг, оставленный / право и логические операторы ИЛИ, XOR, И в день за днем.

, Например, давайте предположим, что мы должны включить бит 3 (справа налево) байта:

намного более эффективно сделать:

Byte B;

B := B XOR 4;

Вместо:

Byte B = 0;
String s;  // 0 based index

s = ConvertToBinary (B);
s[5] = "1";
B := ConvertToDecimal (s);

Отношения.

6
ответ дан 2 revs, 2 users 92% 6 November 2019 в 02:45
поделиться

Сдвиги разряда быстры. Они были реализованы в системах команд ЦП задолго до подразделения, и операции модуля были. Многие из нас использовали сдвиги разряда для арифметики, которая проста на карандаше и бумаге, но не доступна на наших центральных процессорах.

, Например:

  • я использовал сдвиги разряда для вовлечения проектов, включающего большие составные объекты в их простые множители.
  • я также использовал сдвиги разряда для нахождения квадратного и кубического корня произвольно больших целых чисел.
7
ответ дан eleven81 6 November 2019 в 02:45
поделиться

Когда я записал в ассемблере, мой код был полон смещения бита и маскирования.

Сделал это изрядное количество в C, также.

не сделали этого очень на языках сервера или JavaScript.

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

, Например, если у Вас есть 8 битов, Вы проверяете главный бит с "если (a> 127) {...}". Затем Вы сдвиг влево (или умножаются на 2), сделайте "и" с 127 (или сделайте вычитание 256, если последний бит был установлен), и сделайте это снова.

4
ответ дан Nosredna 6 November 2019 в 02:45
поделиться

Я использовал их много в сжатии изображения / распаковка, где биты в битовом массиве были сжаты. Используя http://en.wikipedia.org/wiki/Huffman_coding сжимаемые вещи состоят из различных чисел битов (они все не выравниваются байтом), и поэтому Вам нужны к сдвигу разряда они, когда Вы кодируете или декодируете их.

3
ответ дан ChrisW 6 November 2019 в 02:45
поделиться

Я видел побитовые операторы, используемые, когда несколько флагов использовались в качестве параметра свойства. Например, номер 4 = 1 0 0 средств, что один из трех флагов установлен. Это не хорошо для общедоступного API, но он может убыстриться, вещи в особых случаях начиная с проверки биты быстро.

1
ответ дан Lycha 6 November 2019 в 02:45
поделиться
  • Создающие хорошие флаговые значения для перечислений (вместо того, чтобы ввести вручную 1, 2, 4...)
  • Распаковка данных из битовых полей (много сетевых протоколов используют их)
  • обход Z-кривой
  • взломы Производительности

И я не могу думать о многих случаях, когда они используются. Это обычно наоборот - существует некоторая определенная проблема, и оказывается, что использование битовых операций приведет к лучшим результатам (обычно с точки зрения производительности - время и/или пространство).

25
ответ дан 2 revs 6 November 2019 в 02:45
поделиться

Разрядное смещение не решает проблемы высокоуровневого программирования, но просто мы иногда должны решать более низкие проблемы уровня, и удобно не должным быть записать отдельную библиотеку в C, чтобы сделать это. Именно тогда это привыкает, больше всего мое предположение.

я лично использовал его в записи кодера для преобразователь EBCDIC набора символов.

3
ответ дан Michael Meadows 6 November 2019 в 02:45
поделиться

Да, все время. Как они макросы для упаковки и распаковки 3space координируют к/от 32-разрядному целому числу:

#define Top_Code(a, b, c)           ((((a) + x) << 20) | (((b) + y) << 10) | ((c) + z))                           
#define From_Top_Code(a, b, c, f)   (a = (((f) >>> 20) - x), b = ((((f) & 0xffc00) >>> 10) - y), c = (((f) & 0x3ff) - z))        
0
ответ дан chaos 6 November 2019 в 02:45
поделиться

да. Я должен записать алгоритмы шифрования прежде, и это определенно использует их.

Они также полезны при использовании целых чисел и т.д. для того, чтобы отслеживать состояния.

3
ответ дан 2 revs, 2 users 80% 6 November 2019 в 02:45
поделиться

Быстрое преобразование Фурье — FFT и это являются техникой Cooley-Tukey, потребует, чтобы использование укусило операции смещения.

2
ответ дан LicenseQ 6 November 2019 в 02:45
поделиться

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

3
ответ дан switchmode 6 November 2019 в 02:45
поделиться

При преобразовании чисел от прямого порядка байтов до формата с обратным порядком байтов и наоборот

3
ответ дан Ludwig Wensauer 6 November 2019 в 02:45
поделиться

Да, использовал их в Транспортном потоковом синтаксическом анализаторе MPEG2-2. Это было легче и было лучше читаемый.

1
ответ дан RvdK 6 November 2019 в 02:45
поделиться

Да, я имею. Поскольку Вы могли бы подозревать, что это, скорее всего, будет найдено в низкоуровневом программировании, например, разрабатывая драйверы устройств. Но, я работал над проектом C#, где я должен был разработать веб-сервис, который получил данные из медицинских устройств. Все двоичные данные, что сохраненное устройство было закодировано в пакеты SOAP, но двоичные данные были сжаты и закодированы. Таким образом для распаковки его необходимо было бы сделать партии и много побитовых обработок. И кроме того необходимо было бы сделать много бита, смещающегося для парсинга любой полезной информации, например, порядковый номер устройства является более низкой половиной второго байта или чего-то как этот. Также я видел некоторых людей в.NET (C#), мир делает использование Атрибута Побитового маскирования и Флага, у меня лично никогда не было желания сделать это.

3
ответ дан WebMatrix 6 November 2019 в 02:45
поделиться

Я должен был записать программу для парсинга .ifo файлов на дисках DVD. Это поля, которые объясняют, сколько заголовков, главы, меню, и т.д. находятся на диске. Они составлены из упакованных битов всех размеров и выравнивания. Я подозреваю, что много двоичных форматов требуют подобного разрядного смещения.

1
ответ дан Steve Rowe 6 November 2019 в 02:45
поделиться

Да, я использовал их много времен. Битовое жонглирование важно на встроенных аппаратных средствах, где битовые маски очень распространены. Также важно в игровом программировании при необходимости в каждом последнем бите производительности.

Редактирование: кроме того, я использую их много для управления битовыми массивами, например, изменения глубины цвета или преобразования RGB <-> BGR.

37
ответ дан 2 revs 6 November 2019 в 02:45
поделиться

Найдите ближайшее питание двух больших или равных данному числу:

1 << (int)(ceil(log2(given)))

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

2
ответ дан zoul 6 November 2019 в 02:45
поделиться

Да. Особенно в эмуляторе, который использовал служебные байты и байты состояния для драйвера оборудования. Каждый бит в служебном байте имел особое значение, и каждый бит в байте состояния имел особое значение.

0
ответ дан shortbaldman 6 November 2019 в 02:46
поделиться

Я однажды (многие, много лет назад) записал программу вывода для проекта, который создал электронные таблицы Excel с помощью структуры Excel Oper. Это было формантой двоичного файла, которая потребовала большого объема битового жонглирования. Следующая ссылка дает аромат структуры Oper Книги .

Safari
0
ответ дан Aussie Craig 6 November 2019 в 02:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: