Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Разрядность командной строки / 12 сообщений из 12, страница 1 из 1
31.08.2010, 12:55
    #36820925
Igrok4
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разрядность командной строки
Подскажите как в bat-файлах суммировать числа 1 млрд. и больше? Для стандартных средств не хватает разрядности.
...
Рейтинг: 0 / 0
31.08.2010, 13:11
    #36820994
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разрядность командной строки
А как ты суммируешь? Покажи пример.
...
Рейтинг: 0 / 0
31.08.2010, 13:14
    #36821003
Igrok4
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разрядность командной строки
Код: plaintext
1.
2.
3.
set /a a =  1234567890 
set /a b =  3 
set /a c=%a%+%b%
echo c=%c% 
ещё проходит
а вот
Код: plaintext
1.
2.
3.
set /a a =  12345678901 
set /a b =  3 
set /a c=%a%+%b%
echo c=%c% 
уже нет
...
Рейтинг: 0 / 0
31.08.2010, 13:30
    #36821064
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разрядность командной строки
Хм.. да действительно.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
set /a a =  2147483646 
set /a b =  1 
set /a c=%a%+%b%
echo c=%c% 

set /a a =  2147483647 
set /a b =  1 
set /a c=%a%+%b%
echo c=%c% 

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
>set /a a =  2147483646 

>set /a b =  1 

>set /a c= 2147483646 + 1 

>echo c= 2147483647 
c= 2147483647 

>set /a a =  2147483647 

>set /a b =  1 

>set /a c= 2147483647 + 1 

>echo c=- 2147483648 
c=- 2147483648 

Похоже что челое число в CMD интерпретаторе представлено в виде int32 со знаком. Тогда тебе не повезло :(
...
Рейтинг: 0 / 0
31.08.2010, 14:01
    #36821183
Igrok4
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разрядность командной строки
maytonТогда тебе не повезло :(
Это я уже понял :)
Может у кого калькулятор есть написанный? Который выдаёт число ввиде строки.
...
Рейтинг: 0 / 0
31.08.2010, 14:34
    #36821294
junior  idiot
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разрядность командной строки
Калькулятора не было, но было занимательно вспомнить батники, лол.

Код: plaintext
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.
@echo off

rem складываемые числа
set x=% 1 
set y=% 2 
rem результат будет записан в Z
set z=
set r= 0 

:next_digit
rem берём последнюю цифру Х и Y
set d1=%x:~- 1 , 1 %
set d2=%y:~- 1 , 1 %

rem проверяем, что эти цифры существуют (можно ли проще?)
if %x%.==. (
	if %y%.==. (
		if %r%== 0  goto l_end
	)
	set d1= 0 
) else (
	rem отбрасываем последнюю цифру X
	set x=%x:~ 0 ,- 1 %
)
if %y%.==. (
	set d2= 0 
) else (
	rem отбрасываем последнюю цифру Y
	set y=%y:~ 0 ,- 1 %
)

rem складываем "столбиком"
rem сумма с учётом остатка
set /a r=r+d1+d2
rem очередная цифра (что-то взятие остатка через % не работает)
set /a d=r-(r/ 10 )* 10 
rem новый остаток
set /a r=r/ 10 

rem приписываем цифру к результату слева
set z=%d%%z%

rem echo x=%x%; y=%y%; d1=%d1%; d2=%d2%; r=%r%; d=%d%; z=%z%
goto next_digit

:l_end
rem сложение нулей
if %z%.==. set z= 0 
echo % 1  + % 2  = %z%
Код: plaintext
1.
C:\> 1 .bat  3334567891234567   66673456789123456 
 3334567891234567  +  66673456789123456  =  70008024680358023 
...
Рейтинг: 0 / 0
31.08.2010, 14:40
    #36821325
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разрядность командной строки
Igrok4maytonТогда тебе не повезло :(
Это я уже понял :)
Может у кого калькулятор есть написанный? Который выдаёт число ввиде строки.
Язык шелла, который использует Windows весьма ограничен. Его основное назначение - запускать инталлировщики, программы со специфичным environment, формировать отчеты, e.t.c. Глядя, с каким извращением ты суммируешь числа, только диву даюсь, зачем надо за такие простые вещи платить столь высокую цену разработки.

Если тебе надо нечто большее чем .bat, .cmd - смотри в сторону JScript, VBScript. Они встроены в Windows и всегда запускаются успешно.
...
Рейтинг: 0 / 0
01.09.2010, 10:28
    #36822952
Igrok4
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разрядность командной строки
junior idiot,

Спасибо! Прикольная вещица :)
...
Рейтинг: 0 / 0
02.09.2010, 02:18
    #36824884
tchingiz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разрядность командной строки
mayton
Если тебе надо нечто большее чем .bat, .cmd - смотри в сторону JScript, VBScript. Они встроены в Windows и всегда запускаются успешно.
если надо нечто большее чем бат и смд, надо взять человеческий шел из цигвина
и не калечить себе мозг микрософтом.
...
Рейтинг: 0 / 0
02.09.2010, 07:49
    #36824952
junior  idiot
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разрядность командной строки
Если расчитывать, что скрипт будет выполняться на относительно новой винде, то можно и без цигвина обойтись: Windows Powershell -- весьма мощная штука, и под виндой её использовать приятнее, чем всякие баши, благодаря удобной поддержке COM и .NET.
...
Рейтинг: 0 / 0
02.09.2010, 09:31
    #36825062
belugin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разрядность командной строки
junior idiotЕсли расчитывать, что скрипт будет выполняться на относительно новой винде

...или есть возможность установить его на старую
...
Рейтинг: 0 / 0
02.09.2010, 13:26
    #36825765
jsXYZ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разрядность командной строки
junior idiot,
молодца, не слушай Борчунов!
Код: plaintext
 99999999999999999999999999999999999999999  +  1  =  100000000000000000000000000000000000000000 
...
Рейтинг: 0 / 0
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Разрядность командной строки / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]