IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Работа с битами
сообщение
Сообщение #1


Я.
****

Группа: Пользователи
Сообщений: 809
Пол: Мужской
Реальное имя: Саша

Репутация: -  11  +


Хочется видите ли с битами работать. Но даже в тот же Longint они не влазят.
Вот такой маразм не прокатывает:
program Project1;

{$APPTYPE CONSOLE}

uses
SysUtils;

var
p: pointer;
pSize: integer;
i: integer;

begin
pSize := SizeOf(longint)*8+1;
WriteLn(pSize);
GetMem(p,pSize);
FillChar(p^,pSize,0);
Integer(p^) := 4294967296;
for i := pSize-1 downto 0 do
Write((Integer(p^) shr i)and $1);
WriteLn;
FreeMem(p,pSize);
readln;
end.

Объявлять массив Байтов и делать перегрузку +- не интересно.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Гуру
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской
Ада: Разработчик
Embarcadero Delphi: Сторонник
Free Pascal: Разработчик

Репутация: -  627  +


Цитата
Лучше и не надо, меня именно и интересуют извращения, т. е. посмотреть что можно вытащить из возможностей.
Я б не рекомендовал тебе заниматься подобными извращениями. По той простой причине, что такие вот "финты ушами" мало того, что малопереносимы между разными компиляторами (как ты уже успел убедиться, код, работающий под FPC, не работает при использовании Дельфи), так еще и при выходе новой версии того же компилятора могут быть проблемы (да, достаточно вспомнить те ужесточения, которые были сделаны при переходе от FPC 2.2.x к 2.4.0, многое из того, что было разрешено в ветке 2.2, в ветке 2.4 делать нельзя). Так что тут игра не стоит свеч. Или будешь переписывать код под каждую версию компилятора smile.gif

Цитата
Зачем тогда было выдумывать boolean? для простой смены True = not False ?
Знаешь, в том виде, в котором оно есть в FPC/Дельфи - лучше б этого типа вообще не было. Изначально это задумывалось совсем в другом виде. Вот в Турбо-Паскале более правильная реализация типа Boolean. Тот код, который я приводил в 14-ом сообщении там тоже будет компилироваться, но writeln(byte(b)) выведет не 255, а 1. И любое ненулевое значение, преобразованное к Boolean, также вернется как 1.

Но в Модуле, Haskell-е и Аде еще более корректная реализация: там это именно перечисление, и преобразовать Integer -> Boolean и обратно обычным тайпкастом просто нельзя. Вот именно так это и задумывалось. Хаки - они для программ смертельны...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
sheka   Работа с битами   7.07.2011 18:07
IUnknown   Ну, с таким-то значением ничего перегружать не над…   7.07.2011 18:18
sheka   Ну 512бит это уже лучше, но все равно не много :) …   7.07.2011 19:32
IUnknown   512 бит - это 64 байта, а тип Int64 - это 64 бита.…   7.07.2011 20:14
sheka   Что-то я лишний раз на 8 умножил (логарифм от того…   8.07.2011 2:22
IUnknown   Не будет. Либо тебе очень повезло и ты натолкнулся…   8.07.2011 18:01
sheka   Не ожидал. Совсем не ожидал. А почему Boolean зани…   9.07.2011 3:01
Lapp   Не ожидал. Совсем не ожидал. А почему Boolean зани…   9.07.2011 3:29
sheka   Да это понятно, что sizeof все прекрасно выдает, т…   9.07.2011 3:38
IUnknown   Стоп... Похоже, FPC умеет-таки упаковывать биты (в…   9.07.2011 3:38
Lapp   Идеология кого?Программирования. Компьютера. Ну …   9.07.2011 3:51
sheka   Стремный метод однако. Лучше ничего нет? Дык полу…   9.07.2011 3:59
Lapp   Дык получается, что первые 7 бит booleana - вечные…   9.07.2011 4:09
IUnknown   Кто тебе сказал, что Boolean - это только 0 и 1? Н…   9.07.2011 4:09
Lapp   Кроме прочего, если заводишь boolean переменную ди…   9.07.2011 4:15
sheka   Делфи на такую штуку иероглифы выводит. Не нравитс…   9.07.2011 4:18
Lapp   Ну как бы в Си такое же понятие True и False, и им…   9.07.2011 4:50
IUnknown   Я б не рекомендовал тебе заниматься подобными извр…   9.07.2011 16:56
sheka   Расскажите о перечислениях более подробно: их пре…   10.07.2011 1:42
IUnknown   Ты опять совершаешь ту же самую ошибку. Пойми, что…   10.07.2011 2:43


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 18.06.2024 5:58
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name