1 <?xml version="1.0" encoding="UTF-8"?>
4 * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
5 * Copyright (C) 2011 - DIGITEO - Michael Baudin
6 * Copyright (C) 2017 - Samuel GOUGEON
8 * Copyright (C) 2012 - 2016 - Scilab Enterprises
10 * This file is hereby licensed under the terms of the GNU GPL v2.0,
11 * pursuant to article 5.3.4 of the CeCILL v.2.1.
12 * This file was originally licensed under the terms of the CeCILL v2.1,
13 * and continues to be available under such terms.
14 * For more information, see the COPYING file which you should have received
15 * along with this program.
18 <refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"
19 xmlns:svg="http://www.w3.org/2000/svg" xmlns:ns3="http://www.w3.org/1999/xhtml"
20 xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:db="http://docbook.org/ns/docbook"
21 xmlns:scilab="http://www.scilab.org"
22 xml:id="bitget" xml:lang="ru">
24 <refname>bitget</refname>
25 <refpurpose>Извлекает из целых чисел биты по указанным индексам</refpurpose>
28 <title>Синтаксис</title>
34 <title>Аргументы</title>
40 Скаляр, вектор, матрица или гиперматрица положительных десятичных или
41 кодированных целых чисел.
49 Скаляр, вектор, матрица или гиперматрица десятичных или кодированных целых чисел в
50 <literal>[1, bitmax]</literal>, где <literal>bitmax</literal> - это максимальный
51 индекс битов для типа переменной <varname>x</varname>: индексы битов, которые
52 следует извлечь. Бит №1 - это наименьший бит (2<superscript>0</superscript>).
54 <tr><th>typeof(x)</th><th>bitmax</th><td>..</td><th>typeof(x)</th><th>bitmax</th></tr>
55 <tr align="center"><td>int8 </td><td>7</td> <td> </td><td>uint8</td><td>8</td></tr>
56 <tr align="center"><td>int16 </td><td>15</td><td> </td><td>uint16</td><td>16</td></tr>
57 <tr align="center"><td>int32 </td><td>31</td><td> </td><td>uint32</td><td>32</td></tr>
58 <tr align="center"><td>int64 </td><td>63</td><td> </td><td>uint16</td><td>64</td></tr>
59 <tr align="center"><td>десятичное число</td><td>1024</td><td> </td><td></td><td></td></tr>
68 Скаляр, вектор, матрица или гиперматрица из 0 и 1 типа переменной
69 <varname>x</varname>. Размеры и содержимое <varname>y</varname> следующие:
73 Если <varname>x</varname> скаляр:
76 <varname>y</varname> имеет размеры <varname>pos</varname>
79 <literal>y(i,j,..)</literal> - это значение бита
80 №<literal>pos(i,j,..)</literal> переменной <varname>x</varname>.
87 Если <varname>pos</varname> скаляр:
90 <varname>y</varname> имеет размеры <varname>x</varname>
93 <literal>y(i,j,..)</literal> - это значение бита
94 №<literal>pos</literal> в <literal>x(i,j,..)</literal>.
101 Если <varname>x</varname> и <varname>pos</varname> являются массивами
102 одинаковых размеров, то обработка идёт поэлементно:
105 <varname>y</varname> имеет размеры <varname>x</varname>
106 и <varname>pos</varname>
109 <literal>y(i,j,..)</literal> - это значение бита
110 №<literal>pos(i,j,..)</literal> в <literal>x(i,j,..)</literal>.
116 <para>В противном случае:
119 <varname>y</varname> - это матрица, у которой
120 <literal>length(x)</literal> строк и
121 <literal>length(pos)</literal> столбцов.
124 <literal>y(i,j)</literal> - это значение бита
125 №<literal>pos(j)</literal> в <literal>x(i)</literal>.
137 <title>Описание</title>
139 <literal>bitget()</literal> сканирует выбранные биты двоичного представления неких
140 положительных целых чисел <varname>x</varname>.
141 Эта функция возвращает 0 для снятых битов и 1 для взведённых битов.
144 Результат имеет размеры <varname>x</varname> или <varname>pos</varname> или обеих входных
148 Однако, если и <varname>x</varname> и <varname>pos</varname> являются нескалярами и
149 имеют несовпадающие размеры, то результат <varname>y</varname> является матрицей, игнорирующей
150 размеры <varname>x</varname>. Тогда, после изменения размеров <varname>y</varname>
151 с помощью <literal>y = matrix(y, [size(x) -1])</literal>, значение бита №b в <literal>x(i,..,k)</literal>
152 будет находиться в <literal>y(i,..,k,b)</literal>.
156 <title>Примеры</title>
157 <programlisting role="example"><![CDATA[
159 // Второй бит равен1 (начиная с конца).
166 bitget(uint8(13),4:-1:1)
169 <emphasis role="bold">С массивами и кодированными целыми числами:</emphasis>:
171 <programlisting role="example"><![CDATA[
176 <emphasis role="bold">С большими десятичными целыми числами > 2<superscript>52</superscript></emphasis>:
178 <programlisting role="example"><![CDATA[
179 x = sum(2 .^([7 16 18 19 25 52 70]-1))
180 bitget(x, [7 16 18 19 35 52 70 80])
183 --> x = sum(2 .^([7 16 18 19 25 52 70]-1))
187 --> bitget(x, [7 16 18 19 35 52 70 80])
189 Nan Nan 1. 1. 0. 1. 1. 0.
192 <emphasis role="bold">x и pos являются массивами несовпадающих размеров:</emphasis>
194 <programlisting role="example"><![CDATA[
202 bitget(x, [5 8 12 39])
205 --> bitget(x, [5 8 12 39])
215 <refsection role="see also">
216 <title>Смотрите также</title>
217 <simplelist type="inline">
219 <link linkend="bitstring">bitstring</link>
222 <link linkend="dec2bin">dec2bin</link>
225 <link linkend="bitset">bitset</link>
228 <link linkend="bitand">bitand</link>
231 <link linkend="and_op">&</link>
235 <refsection role="history">
236 <title>История</title>
239 <revnumber>6.1</revnumber>
243 Теперь принимаются положительные беззнаковые целые числа.
246 Теперь принимаются 64-битные кодированные целые числа.
249 Теперь для десятичных целых чисел можно получать биты с индексами в
250 диапазоне [53, 1024].
253 Для десятичных целых чисел > 2<superscript>52</superscript> опрос битов
254 менее относительной точности <literal>%eps</literal> теперь возвращает
255 <literal>NaN</literal> вместо 0.
258 Теперь можно получить несколько битов от каждого элемента входного массива.