<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; CMD/BAT: Модуль числа |a| без условных операций]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=11222&amp;type=atom" />
	<updated>2020-06-08T13:28:12Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=11222</id>
		<entry>
			<title type="html"><![CDATA[Re: CMD/BAT: Модуль числа |a| без условных операций]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=140073#p140073" />
			<content type="html"><![CDATA[<p>Вариант без поразрядных операций:<br /></p><div class="codebox"><pre><code>@ echo off
setlocal enabledelayedexpansion

call :abs &quot;%1&quot;
echo abs(%1) = %errorlevel%

exit /b

:abs
:: Модуль числа
  setlocal
  set /a &quot;abs=(%1)&quot;
endlocal &amp; exit /b %abs:-=%</code></pre></div>]]></content>
			<author>
				<name><![CDATA[Arigato]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=29277</uri>
			</author>
			<updated>2020-06-08T13:28:12Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=140073#p140073</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: CMD/BAT: Модуль числа |a| без условных операций]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=103181#p103181" />
			<content type="html"><![CDATA[<p><strong>torus</strong>, для отрицательных чисел ответ будет отличаться на 1.</p><p>Кроме того, нежелательно вхождение %1 в SET/A без скобок, если допустить, что аргумент может быть не только числом но и выражением;<br />а т.к. в CMD выражения C-подобны, т.е. в общем случае могут содержать присваивания, то нежелательно не однократное вхождение.</p><p>Использованное мной выражение вида </p><div class="codebox"><pre><code>x &gt;&gt; -1</code></pre></div><p> имеет то же предназначение, что и </p><div class="codebox"><pre><code>x &gt;&gt; 32</code></pre></div><p>, т.е. заполнение числа знаковым битом, но не привязано к определённой разрядности. Это пригодно не только для CMD, но и для других языков (JavaScript, AutoHotkey, PHP…).</p>]]></content>
			<author>
				<name><![CDATA[wisgest]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=3850</uri>
			</author>
			<updated>2016-04-28T21:49:19Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=103181#p103181</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: CMD/BAT: Модуль числа |a| без условных операций]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=103179#p103179" />
			<content type="html"><![CDATA[<div class="codebox"><pre><code>set /a &quot;abs=%1^(%1&gt;&gt;32)&quot;</code></pre></div>]]></content>
			<author>
				<name><![CDATA[torus]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=33003</uri>
			</author>
			<updated>2016-04-28T14:21:18Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=103179#p103179</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: CMD/BAT: Модуль числа |a| без условных операций]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=100528#p100528" />
			<content type="html"><![CDATA[<div class="codebox"><pre><code>set /a &quot;abs = (%~1), abs *= (abs &gt;&gt; -1 &lt;&lt; 1) + 1&quot;</code></pre></div>]]></content>
			<author>
				<name><![CDATA[wisgest]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=3850</uri>
			</author>
			<updated>2016-01-19T19:20:28Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=100528#p100528</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: CMD/BAT: Модуль числа |a| без условных операций]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=100401#p100401" />
			<content type="html"><![CDATA[<p>Добавил сюда скобочек:<br /></p><div class="codebox"><pre><code>set /a abs=&quot;(%1&gt;&gt;31)*%1+^!(%1&gt;&gt;31)*%1&quot;</code></pre></div><p>Теперь можно считать модуль от выражения, например:</p><div class="codebox"><pre><code>call :abs 3-8</code></pre></div><p>Полный код в первом сообщении</p>]]></content>
			<author>
				<name><![CDATA[Arigato]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=29277</uri>
			</author>
			<updated>2016-01-17T09:22:12Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=100401#p100401</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: CMD/BAT: Модуль числа |a| без условных операций]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=100353#p100353" />
			<content type="html"><![CDATA[<p>Ох, простите. Был вечер трудного для. Спутал вычисление модуля числа с делением по модулю.</p>]]></content>
			<author>
				<name><![CDATA[Rumata]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24846</uri>
			</author>
			<updated>2016-01-15T05:35:18Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=100353#p100353</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: CMD/BAT: Модуль числа |a| без условных операций]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=100352#p100352" />
			<content type="html"><![CDATA[<p><strong>Rumata</strong>, это что?</p>]]></content>
			<author>
				<name><![CDATA[Arigato]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=29277</uri>
			</author>
			<updated>2016-01-14T22:22:42Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=100352#p100352</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: CMD/BAT: Модуль числа |a| без условных операций]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=100350#p100350" />
			<content type="html"><![CDATA[<div class="codebox"><pre><code>set /a &quot;x=8 % 3&quot;</code></pre></div>]]></content>
			<author>
				<name><![CDATA[Rumata]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24846</uri>
			</author>
			<updated>2016-01-14T19:42:09Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=100350#p100350</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[CMD/BAT: Модуль числа |a| без условных операций]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=100349#p100349" />
			<content type="html"><![CDATA[<p>Написал функцию для нахождения модуля числа без использования условных операций. Вот:</p><div class="codebox"><pre><code>@ echo off
setlocal enabledelayedexpansion

set /p a=Enter Integer: 
call :abs %a%
echo abs(%a%) = %errorlevel%

exit /b

:abs
:: Модуль числа
  setlocal
  set /a abs=&quot;((%1)&gt;&gt;31)*(%1)+^!((%1)&gt;&gt;31)*(%1)&quot;
endlocal &amp; exit /b %abs%</code></pre></div><p>Вариант без поразрядных операций:<br /></p><div class="codebox"><pre><code>@ echo off
setlocal enabledelayedexpansion

call :abs &quot;%1&quot;
echo abs(%1) = %errorlevel%

exit /b

:abs
:: Модуль числа
  setlocal
  set /a &quot;abs=(%1)&quot;
endlocal &amp; exit /b %abs:-=%</code></pre></div>]]></content>
			<author>
				<name><![CDATA[Arigato]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=29277</uri>
			</author>
			<updated>2016-01-14T19:01:07Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=100349#p100349</id>
		</entry>
</feed>
