powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Вопрос по указателям
48 сообщений из 48, показаны все 2 страниц
Вопрос по указателям
    #38173422
asupviking
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, вот программа подсчитывающая количество символов
в строке введённой пользователем, помогите разобраться с указателями,
не понимаю что происходит в двух строках

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
const int max=80;
char bufer[max];                    
char *pbufer=bufer;            //pbufer - это указатель на char, содержащий адрес первого элемента массива bufer
cin.getline(bufer, max, '\n');  

while(*pbufer)                   //пока не встретиться символ "\0"
	pbufer++;                 //вот здесь не понятно что происходит
//после каждой итерации указатель pbufer будет смещаться на один элемент массива bufer ?
//после того как цикл завершится указатель будет содержать адрес последнего элемента строки bufer ?

cout<<endl;

cout<<pbufer-bufer;           //здесь совсем не понятно, даже никаких вариантов нет

cout<<endl;
system("pause");
return 0;
}
...
Рейтинг: 0 / 0
Вопрос по указателям
    #38173437
m_Sla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asupviking, в отладчике прогонял?
...
Рейтинг: 0 / 0
Вопрос по указателям
    #38173439
Abstraction
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asupviking,

Код: plaintext
1.
	pbufer++;                 //вот здесь не понятно что происходит

Что сказал используемый учебник про оператор ++?
Код: plaintext
1.
cout<<pbufer-bufer;           //здесь совсем не понятно, даже никаких вариантов нет

"Вывести в поток cout разность pbufer и bufer".
...
Рейтинг: 0 / 0
Вопрос по указателям
    #38173452
asupviking
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
m_Sla, нет не прогонял, я им ещё пока не пользуюсь.
...
Рейтинг: 0 / 0
Вопрос по указателям
    #38173519
m_Sla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asupvikingm_Sla, нет не прогонял, я им ещё пока не пользуюсь.ну и зря
...
Рейтинг: 0 / 0
Вопрос по указателям
    #38173784
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asupviking


Код: 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.
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
const int max=80;
char bufer[max];                    
char *pbufer=bufer;            //pbufer - это указатель на char, содержащий адрес первого элемента массива bufer
cin.getline(bufer, max, '\n');  

while(*pbufer)                   //пока не встретиться символ "\0"
	pbufer++;                 //вот здесь не понятно что происходит
// тут увеличивается на 1 сам указатель. Смещается к следующей вперед ячейке в массиве.
//после каждой итерации указатель pbufer будет смещаться на один элемент массива bufer ?
// да
//после того как цикл завершится указатель будет содержать адрес последнего элемента строки bufer ?

// точнее следующего за последним нуль-символа.

cout<<endl;

cout<<pbufer-bufer;           //здесь совсем не понятно, даже никаких вариантов нет
// вычитание двух указателей, получение смещения первого относительно второго, в данном случае просто получится длина строки.
// надо помнить, что смещение в таком случае выставляется всегда в количестве ячеек, а не в байтах, но тут это совпадает.

cout<<endl;
system("pause");
return 0;
}
...
Рейтинг: 0 / 0
Вопрос по указателям
    #38173792
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще, это



while(*pbufer)
pbufer++;

Обычно пишется так:

while(*pbufer++);

Собственно за это мы и любим c/c++.
...
Рейтинг: 0 / 0
Вопрос по указателям
    #38174113
asupviking
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Abstraction, книга говорит что оператор ++ это оператор инкремента, он увеличивает значение на единицу, а так как pbufer указатель на char он будет смещаться на sizeof(char), и указывать на следующий элемент массива.

AbstractionВывести в поток cout разность pbufer и bufer
понятно что вывести в поток, не понятно то как происходит разность между указателем на на char и массивом символов, они же не числа.
...
Рейтинг: 0 / 0
Вопрос по указателям
    #38174279
Abstraction
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asupvikingAbstractionВывести в поток cout разность pbufer и bufer
понятно что вывести в поток, не понятно то как происходит разность между указателем на на char и массивом символов, они же не числа.Как говорили пифагорейцы, "всё сущее есть число".

Чуть менее философски, всякая переменная примитивного типа может быть представлена числом из некоторого диапазона. В частности, любой указатель есть адрес в памяти. В Вашем случае имеем указатель на начало массива (адрес первого элемента) и указатель на первый элемент, равный '\0'. Разность указателей считается по тем же правилам, аналогичным правилам для суммы указателя и целого числа и в данном случае даёт нам количество символов в C-строке.
авторВообще, это

while(*pbufer)
pbufer++;

Обычно пишется так:

while(*pbufer++);Варианты не эквивалентны. Если изначально *pbufer == '\0', в исходном варианте значение pbufer не изменится. Скорее уж
Код: plaintext
1.
for(pbufer=bufer; *pbufer; ++pbufer);
...
Рейтинг: 0 / 0
Вопрос по указателям
    #38174422
asupviking
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Abstraction, если я правильно понимаю, это всё можно условно представить следующим образом:
например есть строка "HELLO". Адрес ячейки памяти в которой находится первый символ "H" равен 10, символ "E" - 11, символ "L" - 12, символ "L" - 13, символ "O" - 14, символ "\0" - 15.
И получается что 15-10=5 символов, только в реале адреса в шестнадцатеричной форме.
...
Рейтинг: 0 / 0
Вопрос по указателям
    #38174478
Abstraction
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asupvikingAbstraction, если я правильно понимаю, это всё можно условно представить следующим образом:
например есть строка "HELLO". Адрес ячейки памяти в которой находится первый символ "H" равен 10, символ "E" - 11, символ "L" - 12, символ "L" - 13, символ "O" - 14, символ "\0" - 15.
И получается что 15-10=5 символов, только в реале адреса в шестнадцатеричной форме ."Шестнадцатеричная форма" - это просто форма записи числа. "Само по себе" число не имеет никакой формы - скажем, число 18 можно писать "18", "0x12", "восемнадцать", "10010b", "1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1", ещё как угодно - это одно и то же число. Шестнадцатеричная форма удобна для понимания того, какие биты чему равны, поэтому отладчики обычно представляют значения адресов в ней.
...
Рейтинг: 0 / 0
Вопрос по указателям
    #38174524
asupviking
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Abstraction , ясно, спасибо за объяснения.
...
Рейтинг: 0 / 0
Вопрос по указателям
    #38174754
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asupvikingAbstraction, книга говорит что оператор ++ это оператор инкремента, он увеличивает значение на единицу, а так как pbufer указатель на char он будет смещаться на sizeof(char), и указывать на следующий элемент массива.

AbstractionВывести в поток cout разность pbufer и bufer
понятно что вывести в поток, не понятно то как происходит разность между указателем на на char и массивом символов, они же не числа.

Эта операция производится с двумя указателями.
Первый указатель по объявленному типу, второй -- массив, но массив всегда в С и С++ без явного указания может быть приведён к типу "указатель на первый элемент этого массива", что тут и происходит.
...
Рейтинг: 0 / 0
Вопрос по указателям
    #38174759
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Abstraction
while(*pbufer++);Варианты не эквивалентны. Если изначально *pbufer == '\0', в исходном варианте значение pbufer не изменится. Скорее уж
Код: plaintext
1.
for(pbufer=bufer; *pbufer; ++pbufer);

[/quot]


Да, спасибо, проглядел.
...
Рейтинг: 0 / 0
Вопрос по указателям
    #38174761
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asupvikingAbstraction, если я правильно понимаю, это всё можно условно представить следующим образом:
например есть строка "HELLO". Адрес ячейки памяти в которой находится первый символ "H" равен 10, символ "E" - 11, символ "L" - 12, символ "L" - 13, символ "O" - 14, символ "\0" - 15.
И получается что 15-10=5 символов, только в реале адреса в шестнадцатеричной форме.

В реале адреса в двоичной форме, но это не имеет никакого значения.
...
Рейтинг: 0 / 0
Вопрос по указателям
    #38174804
asupviking
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZiv, спасибо за помощь.
...
Рейтинг: 0 / 0
Вопрос по указателям
    #38177505
chabapok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторОбычно пишется так:

while(*pbufer++);

Собственно за это мы и любим c/c++.

А "мы" - это кто? И почему на "нас" надо равняться? Эта конструкция выглядит высокооптимизированной, но никто не сказал, что она таковой будет выглядеть для компилятора. И никто не сказал что только с ней компилятор сможет сделать самый номральный код; мы лишь подразумеваем, что нам этого хотелось бы, и надеемся.

Реально, человеку, который учит си и находится на этапе "а что такое ++ для указателя?", я бы не советовал использовать этот ад. Он что такое pbufer++ не может понять, а вы ему рекомендуете *pbufer++.
Путь пользуется простыми иснтрукциями. Умение составлять из них цепочки придет само собой.
...
Рейтинг: 0 / 0
Вопрос по указателям
    #38177516
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chabapok,

Это идиома, а не оптимизация.
Этот прием нужно знать с пеленок, иначе не сможешь читать чужие исходники, а именно в этом состоит 90% всей работы программиста.
...
Рейтинг: 0 / 0
Вопрос по указателям
    #38177578
chabapok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну замечательно, и до них дело дойдет, кто ж спорит.

однако, если взглянуть на топик со стороны, то выглядет старанно: пришел человек спросить что такое pbufer++, а ему сразу советуют *pbufer++. Пригодится, мол.

Очевидно, это нарушает порядок вещей, и поэтому такой совет он все равно проигнорирует. Постойте! Дайте же ему хотя бы текущее разгрести.
...
Рейтинг: 0 / 0
Вопрос по указателям
    #38178251
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chabapokНу замечательно, и до них дело дойдет, кто ж спорит.

однако, если взглянуть на топик со стороны, то выглядет старанно: пришел человек спросить что такое pbufer++, а ему сразу советуют *pbufer++. Пригодится, мол.

Очевидно, это нарушает порядок вещей, и поэтому такой совет он все равно проигнорирует. Постойте! Дайте же ему хотя бы текущее разгрести.

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

например:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
char *mystrcpy(char *dst, const char *src)
{
char *ptr;
ptr = dst;
while(*dst++=*src++);
return(ptr);
}
...
Рейтинг: 0 / 0
Вопрос по указателям
    #38178255
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторА "мы" - это кто? И почему на "нас" надо равняться?

Это не "мы", а программисты на С. (и С++). Это лаконичные языки, мощные, в которых в единице кода (строчке) можно выразить очень много. Они таковы по своей натуре, с рождения. Ну и ровняться ни на что не надо, надо просто, если хочешь писать на каком-то языке, его знать и уметь применять. Оно конечно, надо знать меру, но для С-шника подобный код хотя бы должен не вызывать затруднений в чтении.

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

Оптимизация тут ни при чём. Оптимизирует компилятор. А здесь просто удобство написания кода. К скорости выполнения кода это никак не относится.

авторРеально, человеку, который учит си и находится на этапе "а что такое ++ для указателя?", я бы не советовал использовать этот ад. Он что такое pbufer++ не может понять, а вы ему рекомендуете *pbufer++.
Путь пользуется простыми иснтрукциями. Умение составлять из них цепочки придет само собой.


Не хотите -- пишите на бейсике, кто ж вас заставляет...
...
Рейтинг: 0 / 0
Вопрос по указателям
    #38178258
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivНе хотите -- пишите на бейсике, кто ж вас заставляет...чёрт, +1, лучший комент за последние 2 года ))))
...
Рейтинг: 0 / 0
Вопрос по указателям
    #38178264
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivЭто лаконичные языки, мощные, в которых в единице кода (строчке) можно
выразить очень много.
Раз уж зашла речь: не подскажете как можно одной операцией получить частное и остаток
деления двух целых чисел?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вопрос по указателям
    #38178275
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovMasterZivЭто лаконичные языки, мощные, в которых в единице кода (строчке) можно
выразить очень много.
Раз уж зашла речь: не подскажете как можно одной операцией получить частное и остаток
деления двух целых чисел?


Как бы сложно, в С (и С++) нет возврата множественных значений, так что "одной операцией получить" не очень понятно, ГДЕ получить. На выходе функции такого быть не может, а где ещё -- только в переменных, наверное.
Ну и "одной операцией" -- тоже не понятно. Одна операция -- деление, другая -- получение остатка от деления. Видимо, имелось в виду -- одной строкой кода.

Тогда что-то в этом роде:

Код: plaintext
1.
2.
3.
4.
int a = 17, b = 4;
int res, rest;

(rest = a%b), (res = a/b);
...
Рейтинг: 0 / 0
Вопрос по указателям
    #38178281
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivНу и "одной операцией" -- тоже не понятно. Одна операция -- деление,
другая -- получение остатка от деления.
Для интеловского процессора это одна операция. Но таки да: он-то может вернуть результат
сразу в двух регистрах, чего в С не добиться.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вопрос по указателям
    #38178292
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovНо таки да: он-то может вернуть результат
сразу в двух регистрах, чего в С не добиться.
у компилятора обычно хватает сообразительности в случае
Код: plaintext
1.
rest = a%b; res = a/b;


обойтись одной командой div
...
Рейтинг: 0 / 0
Вопрос по указателям
    #38178314
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Деление в сочетании с остатком не в каждой программе встретишь.
Чаще просто остаток нужен, иногда деление. Но чтобы вместе... Мне лично приходит в голову только один алгоритм, где это надо - перевод числа в строку, но на это есть стандартная функция.
Так что вообще не понятно об чем вопрос :)

А вот сканирование памяти указателем - это типичная задача в системном программировании, вот и сделали лаконичную поддержку в синтаксисе.
...
Рейтинг: 0 / 0
Вопрос по указателям
    #38178321
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyМне лично приходит в голову только один алгоритм, где это надо -
перевод числа в строку, но на это есть стандартная функция.
Любая длинная арифметика, включая шифрование и хэширование.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вопрос по указателям
    #38178327
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

Так я и говорю, это то, для чего существуют готовые библиотеки, и в обычной жизни никто этим не занимается.
...
Рейтинг: 0 / 0
Вопрос по указателям
    #38178329
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyТак я и говорю, это то, для чего существуют готовые библиотеки

Ткни пальцем в библиотеку, где есть перевод 128-разрядного числа в строку и обратно.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вопрос по указателям
    #38178331
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

Для начала неплохо было бы продемонстрировать, что это вообще кому-то нужно, кроме вас :)
...
Рейтинг: 0 / 0
Вопрос по указателям
    #38178335
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyДля начала неплохо было бы продемонстрировать, что это вообще
кому-то нужно, кроме вас :)
ODBC - слыхал? Тип NUMERIC. Внутренне - 128 разрядное целое. Никому не нужно работать с
ODBC? Не верю!
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вопрос по указателям
    #38178340
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovAnatoly MoskovskyДля начала неплохо было бы продемонстрировать, что это вообще
кому-то нужно, кроме вас :)
ODBC - слыхал? Тип NUMERIC. Внутренне - 128 разрядное целое. Никому не нужно работать с
ODBC? Не верю!
Повторяю вопрос Анатолия: а зачем тебе это делать вручную? Получаешь рекордсет со сложным типом? Ну так SQLBind его! Был NUMERIC в СУБД, стал SQL_NUMERIC_STRUCT в С. И никаких проблем.
...
Рейтинг: 0 / 0
Вопрос по указателям
    #38178344
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owlстал SQL_NUMERIC_STRUCT в С. И никаких проблем.
Э, нет, вот тут-то проблемы только и начинаются: отобразить этот самый SQL_NUMERIC_STRUCT
на экране, преобразовать в OCINumber и т.д. и т.п.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вопрос по указателям
    #38178352
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

Вы можете прочесть числовое поле из курсора сразу как строку. Не нужны никакие промежуточные SQL_NUMERIC_STRUCT.

Короче. Суть в том что арифметика - задача нетипичная для системного программирования.
Поэтому никаких фишек для этого в языке нет.
...
Рейтинг: 0 / 0
Вопрос по указателям
    #38179268
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyDimitry Sibiryakov,

Для начала неплохо было бы продемонстрировать, что это вообще кому-то нужно, кроме вас :)

ну, мне тоже нужно...
...
Рейтинг: 0 / 0
Вопрос по указателям
    #38179289
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv,

А если копнуть поглубже, то тоже окажется что это нужно, только потому ручками пытаетесь делать то для чего есть готовое АПИ? :)
...
Рейтинг: 0 / 0
Вопрос по указателям
    #38179295
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ладно, специально для вас двоих нагуглил:
Перевод 128-битного числа в строку вообще без деления .
(Надо только примере вместо typedef unsigned long uint32 использовать кроссплатформенный 32-битный беззнаковый, например uint32_t из ANSIС, чтобы и на 64 битах тоже работало )

Еще пожелания будут? :)
...
Рейтинг: 0 / 0
Вопрос по указателям
    #38179412
sherzod_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovMasterZivНу и "одной операцией" -- тоже не понятно. Одна операция -- деление,
другая -- получение остатка от деления.Для интеловского процессора это одна операция. Но таки да: он-то может вернуть результат сразу в двух регистрах, чего в С не добиться.
Какие проблемы, в си можно добиться всего. Напишите asm вставку (это как раз часть стандартизированного языка, для тех кто любит поговаривать: "а в таком то проце есть такая операция") в функции для использования этой операции и будет вам 1 statement для вычисления. Если хотите кросс-о напишите функцию без asm-вставки. Если в плюсах, вообщем можно задействовать перегрузку какого-нить оператора и возвращать структуру. Делов-то.
...
Рейтинг: 0 / 0
Вопрос по указателям
    #38179431
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sherzod_,

не надо асм вставки, компилятор в состоянии оптимизировать эту несчастную команду.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
	int a= atoi("1212");
000000013FB71006  lea         rcx,[string "1212" (013FB73268h)]  
000000013FB7100D  call        qword ptr [__imp_atoi (013FB73170h)]  
	int b= atoi("133");
000000013FB71013  lea         rcx,[string "133" (013FB73270h)]  
000000013FB7101A  mov         ebx,eax  
000000013FB7101C  call        qword ptr [__imp_atoi (013FB73170h)]  
000000013FB71022  mov         ecx,eax  

	int c= a/b;
	int d=a%b;
000000013FB71024  mov         eax,ebx  
000000013FB71026  cdq  
000000013FB71027  idiv        eax,ecx  


	printf("%i % i",c,d);
000000013FB71029  lea         rcx,[string "%i %i" (013FB73274h)]  
000000013FB71030  mov         r8d,edx  
000000013FB71033  mov         edx,eax  
000000013FB71035  call        qword ptr [__imp_printf (013FB73168h)]  
	return 0;

...
Рейтинг: 0 / 0
Вопрос по указателям
    #38179448
m_Sla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyЛадно, специально для вас двоих нагуглил:
Перевод 128-битного числа в строку вообще без деления .Интересный алгоритм. На моем компе работает быстрее чем на делениях.
...
Рейтинг: 0 / 0
Вопрос по указателям
    #38179467
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyMasterZiv,

А если копнуть поглубже, то тоже окажется что это нужно, только потому ручками пытаетесь делать то для чего есть готовое АПИ? :)

Дай ссылку пожалуйста на это готовое API. К тому же, извини, а как быть тем, кто это самое API должен реализовать?
...
Рейтинг: 0 / 0
Вопрос по указателям
    #38179853
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivДай ссылку пожалуйста на это готовое API. К тому же, извини, а как быть тем, кто это самое API должен реализовать?
Готовое АПИ к чему? Задача-то не описана.
Перевод числа в строку это не задача, это один из шагов решения какой-то задачи.

Как быть?
Конкретно по делению и остатку - я выше привел пример, где вообще все на сдвигах и сложениях. Вот так и быть. Думать надо, а не в лоб решать задачи :)
...
Рейтинг: 0 / 0
Вопрос по указателям
    #38179982
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
m_SlaИнтересный алгоритм.
Чего ж там интересного-то? Обычная длинная арифметика в частном случае для четырёх целых.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вопрос по указателям
    #38180037
m_Sla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakovm_SlaИнтересный алгоритм.
Чего ж там интересного-то? Обычная длинная арифметика в частном случае для четырёх целых.
Обычная:
Код: 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.
#include <stdio.h>

unsigned int a [] = { 0x12345678, 0x12345678, 0x12345678, 0x12345678 };

/* 24197857161011715162171839636988778104 */

int
main ()
{
  unsigned long long d, r;

  do
    {
      r = a [0];

      d = r / 10;
      r = ((r - d * 10) << 32) + a [1];
      a [0] = d;

      d = r / 10;
      r = ((r - d * 10) << 32) + a [2];
      a [1] = d;

      d = r / 10;
      r = ((r - d * 10) << 32) + a [3];
      a [2] = d;

      d = r / 10;
      r = r - d * 10;
      a [3] = d;

      printf ("%d\n", (unsigned int) r);
    }
  while (a[0] || a[1] || a[2] || a[3]);

  return 0;
}

в каждом учебнике есть.
Получение строки на сдвигах первый раз вижу.
...
Рейтинг: 0 / 0
Вопрос по указателям
    #38180096
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

Алгоритм там для общего случая годится.
...
Рейтинг: 0 / 0
Вопрос по указателям
    #38180189
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
m_SlaПолучение строки на сдвигах первый раз вижу.
Сдвиги там, собственно, служат только для получения потока бит. Основной трюк это
умножение десятичной строки на 2.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вопрос по указателям
    #38180200
m_Sla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
m_SlaAnatoly MoskovskyЛадно, специально для вас двоих нагуглил:
Перевод 128-битного числа в строку вообще без деления .Интересный алгоритм. На моем компе работает быстрее чем на делениях.Показалось. :)
Алгоритм на делениях в разы быстрее алгоритма на сдвигах.
...
Рейтинг: 0 / 0
48 сообщений из 48, показаны все 2 страниц
Форумы / C++ [игнор отключен] [закрыт для гостей] / Вопрос по указателям
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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