Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Клуб программистов > Свободное общение
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.08.2023, 14:00   #1
Drouge
Пользователь
 
Регистрация: 18.05.2020
Сообщений: 23
По умолчанию Возможности ChatGPT в программировании

Я предлагаю ChatGPT перевести фрагменты кода с C++ на Delphi. Сам C++ не знаю.

В частности, этот участок

Код:
unsigned int num_of_bytes, num_of_bits, bytes[32], bytecnt, tmp
…
while (tmp != 0) {
      bytes[bytecnt++] = tmp & 0xff;
      tmp >>= 8;
  }
Он перевёл как

Код:
var
  i, num: Integer;
  num_of_bytes, num_of_bits, bytecnt, tmp: Cardinal;
  bytes: array[0..31] of Cardinal;
…
   while tmp <> 0 do
    begin
      bytes[bytecnt] := tmp and $ff;
      tmp := tmp shr 8;
      Inc(bytecnt);
    end;
Тут всё правильно? Значит в C++ можно прописать if a>b++ и это означает что при сравнении заодно на единицу увеличится b? До или после сравнения?

Далее такой фрагмент:

Код:
    int minint[3], maxint[3], mindiff, *lip, diff;
    unsigned sizeint[3], sizesmall[3], bitsizeint[3], size3, *luip;
…
  sizeint[0] = maxint[0] - minint[0]+1;
  sizeint[1] = maxint[1] - minint[1]+1;
  sizeint[2] = maxint[2] - minint[2]+1;
  
  if ((sizeint[0] | sizeint[1] | sizeint[2] ) > 0xffffff) {
      bitsizeint[0] = sizeofint(sizeint[0]);
      bitsizeint[1] = sizeofint(sizeint[1]);
      bitsizeint[2] = sizeofint(sizeint[2]);
      bitsize = 0; /* flag the use of large sizes */
  } else {
      bitsize = sizeofints(3, sizeint);
Он перевёл так:

Код:
var
  minint, maxint: array[0..2] of Integer;
  mindiff, diff: Integer;
  lip: ^Integer;
  sizeint, sizesmall, bitsizeint: array[0..2] of Cardinal;
  size3, luip: Cardinal;

sizeint[0] := maxint[0] - minint[0] + 1;
sizeint[1] := maxint[1] - minint[1] + 1;
sizeint[2] := maxint[2] - minint[2] + 1;

if (sizeint[0] or sizeint[1] or sizeint[2] > $ffffff) then
begin
  bitsizeint[0] := sizeofint(sizeint[0]);
  bitsizeint[1] := sizeofint(sizeint[1]);
  bitsizeint[2] := sizeofint(sizeint[2]);
  bitsize := 0; // flag the use of large sizes
end
else
begin
  bitsize := sizeofints(3, sizeint);
end;
Тут похоже одна ошибка – luip в оригинале это указатель на интегер, а он это не понял? А в остальном правильно?
Drouge вне форума Ответить с цитированием
Старый 10.08.2023, 14:15   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Цитата:
Сообщение от Drouge Посмотреть сообщение
Значит в C++ можно прописать if a>b++ и это означает что при сравнении заодно на единицу увеличится b?
Да

Цитата:
Сообщение от Drouge Посмотреть сообщение
До или после сравнения?
Раз написали после переменной, значит после. Вроде ж простая логика.

Цитата:
Сообщение от Drouge Посмотреть сообщение
А в остальном правильно?
Логические и битовые операции немного разное

https://habr.com/en/news/753660/
p51x вне форума Ответить с цитированием
Старый 11.08.2023, 08:58   #3
Drouge
Пользователь
 
Регистрация: 18.05.2020
Сообщений: 23
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Логические и битовые операции немного разное
Можно ещё просветить по C++: что означает эта строка

Код:
if ((sizeint[0] | sizeint[1] | sizeint[2] ) > 0xffffff) {
Здесь три интегера сначала побитово складываются? 111000+00110=111110?
И что значит 0xffffff?
Drouge вне форума Ответить с цитированием
Старый 11.08.2023, 13:06   #4
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,550
По умолчанию

В двоичном виде эта константа выглядит как 111111111111111111111111, ну а в десятичном беззнаковом 16777215
digitalis на форуме Ответить с цитированием
Старый 11.08.2023, 16:38   #5
Drouge
Пользователь
 
Регистрация: 18.05.2020
Сообщений: 23
По умолчанию

Поясните всё-таки, что это за операторы Или для чисел? Я с таким никогда не работал.
Drouge вне форума Ответить с цитированием
Старый 11.08.2023, 16:49   #6
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

https://ru.wikipedia.org/wiki/%D0%91...86%D0%B8%D1%8F
p51x вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ChatGPT ? mirudom Общие вопросы по программированию, компьютерный форум 8 20.09.2023 13:43
возможности С++ andrew8888 Общие вопросы C/C++ 4 20.04.2015 17:42
возможности С alex(21) Общие вопросы C/C++ 10 17.10.2009 16:24