- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
#include <stdio.h>
int main() {
unsigned d,t,k;
scanf("%d",&d);
t=d;
for(k=0;t!=0;k++) //определяем кол-во значащих битов
t>>=1;
//обнуляем старший значащий бит
d<<=sizeof(d)*8-k+1;
d>>=sizeof(d)*8-k+1;
return 0;
}
Stalker 11.06.2010 12:44 # 0
guest 30.04.2013 17:07 # 0
guest 30.04.2013 17:27 # 0
или
3.14159265 11.06.2010 12:56 # 0
после такиз говнокодов начинаешь задумыватся о удобстве и легкости ассемблера ))
Stalker 11.06.2010 12:58 # 0
UPD: Хотя бы на асме
movaxbx 11.06.2010 13:03 # 0
Stalker 11.06.2010 13:07 # 0
d <<= k;
d >>= k;
pushkoff 11.06.2010 13:25 # +1
3.14159265 11.06.2010 14:24 # +3
пожалуйста 3 строки
bsr eax,cl
jz skip ;если eax=0
btr eax,cl
skip: ....
Как говорится
Use asm Luke
bsf and bsr instructions scan a word or double word for first set bit and store the index of this bit into destination operand, which must be general register. The bit string being scanned is specified by source operand, it may be either general register or memory. The ZF flag is set if the entire string is zero (no set bits are found); otherwise it is cleared.
Stalker 11.06.2010 14:34 # +1
Тока там явно не CL.
3.14159265 11.06.2010 14:49 # +1
ага, это я на автомате как я юзаю в shr написал
и еще там jz skip по большому счету не сильно нужен
xaionaro 11.06.2010 22:40 # 0
Хотя признаюсь, сам я данной инструкцией ниразу в жизни не пользовался и может просто не знаю о существовании каких-нибудь "подземных камней", как например со скоростью работы "repe" на современных компьютерах.
xaionaro 12.06.2010 10:27 # 0
guest6 20.05.2024 01:15 # 0
https://en.m.wikipedia.org/wiki/Find_first_set
xaionaro 11.06.2010 21:35 # +1
Stalker 12.06.2010 08:16 # 0
guest6 20.05.2024 01:19 # 0
https://gcc.gnu.org/onlinedocs/gcc-4.8.2/gcc/Other-Builtins.html#Other-Builtins
Desktop 19.05.2024 19:20 # 0
Dummy00001 11.06.2010 14:06 # 0
использовался тот факто что если от числа отнять 1 и сделать xor с оригиналом то получится (почти) маска для следующего установленого бита. откусывая от числа нижние установленые биты, в цикле доходится до последнего установленого. и число итераций равно числу установленых битов.
nil 11.06.2010 16:49 # 0
xaionaro 12.06.2010 17:23 # 0
Хоть и не многим лучше, но на CeleronM работает ощутимо быстрее.
xaionaro 13.06.2010 13:34 # 0
guest 30.04.2013 17:20 # 0
или в 2 строчки:
Говногость 12.06.2010 18:12 # 0
nil 12.06.2010 20:10 # +7
xaionaro 12.06.2010 21:30 # 0
Откуда это? Или это собственный алгоритм?
nil 12.06.2010 21:39 # +3
http://graphics.stanford.edu/~seander/bithacks.html
xaionaro 12.06.2010 21:42 # 0
P.S.: Я смотрю, там немало очень интересных приёмов.
xaionaro 12.06.2010 21:57 # 0
xaionaro 12.06.2010 22:06 # 0
Desktop 19.05.2024 19:21 # 0
– с одной стороны, мы тут все не программисты, а, с другой, хули ты тут забыл тогда?
guest6 19.05.2024 21:45 # 0
movaxbx 12.06.2010 23:37 # 0
nil 13.06.2010 00:42 # +3
Первое магическое число — это смещенная экспонента 52 (2**(11-1)-1+52)=1075=0x433
Второе магическое число — это 2**52 в формате дабла, можно написать как (double)(1LL<<52), тогда не так страшно.
При таком способе, как мы положили число в дабл, оно все равно что получило старший бит (мы его по стандарту не пишем, потому что в нормализованном виде старший бит всегда равен единице), мы его вычитаем (2**52), и вуаля, оно нормализуется. Сдвигаем экспоненту на 20 бит (чтобы она встала на место в старшем слове). Последнее вычитание — это достать экспоненту из смещенной.
Как-то так:)
Stalker 13.06.2010 03:35 # 0
Говногость 13.06.2010 10:04 # 0
HyperGeek 13.06.2010 12:58 # 0
xaionaro 13.06.2010 13:05 # 0
HyperGeek 13.06.2010 13:23 # 0
Я привел лишь еще один вариант решения, применять на практике которое я не призывал )
guest 30.04.2013 19:20 # 0
guest6 19.05.2024 19:26 # 0
guest6 19.05.2024 19:43 # 0
Нил был в лиспе, когда твои родители еще не родились.
Из лиспа он перекочевал в смалток и в паскаль
Из смалтока и лиспа в руби
Из смалкота в ObjC
из ObjC в Swift
Впринципе, любое Null-говно есть только в Си и его наследниках.
Скорее всего это из симулы пошло, но я не уверен
нил круче нула
киля азиров не даст соврать
guest6 20.05.2024 01:08 # 0
guest6 19.05.2024 19:48 # 0
guest6 20.05.2024 01:25 # 0
guest6 20.05.2024 01:27 # 0
Начиная с c99 пока не возникало необходимости использовать int (кроме конечно случаев когда он явно указан в сигнатуре функции)
guest6 20.05.2024 01:29 # 0
guest6 20.05.2024 01:31 # 0
Бывает размер рабочих регистров, максимальный размер ближнего указателя (в случае сегментной адресации), разрядность шины памяти в конце концов (это важно для выравнивания)
guest6 20.05.2024 01:45 # 0
У 8088/8086 регистры общего назначения были 16-битными, однако, были инструкции, работающие с 8 битами (половинки типа AH и AL) и с 32 битами (когда аргумент или результат в паре регистров DX+AX), длинные указатели были 32 битными, однако линейный адрес в памяти был 20-битным, а вот размер адреса порта был 10-битным. А у математического сопроцессора регистры были 80-битными, однако, их можно было использовать как 64- и 32-битные.
guest6 20.05.2024 01:48 # 0
AX -- 16
EAX -- 32
RAX -- 64
(причем под словом "полностью 32-х разрядная ОС" в моем детстве например понимали "ОС с поддержкой пейнджинга" -- то-есть ос, требующая 386)
Но как это мапится на другие процессоры?
guest6 20.05.2024 01:55 # 0
guest6 20.05.2024 01:58 # 0
Утверждать, что процессоры бывают "32-х битные и 64-х битные" потому, что так бывало у Intel, это как утверждать, что языки программирования бывают "вторые" и "третьи" (потому что так было у пайтона)
guest6 20.05.2024 02:01 # 0
guest 30.04.2013 17:43 # 0
guest 30.04.2013 18:09 # 0
guest 14.06.2010 14:12 # 0
guest 14.06.2010 16:04 # +2
xaionaro 14.06.2010 18:12 # +2
guest 14.06.2010 20:22 # +1
guest6 19.05.2024 20:23 # 0
had in mind was an Intel 386SX-based system with 4 MB of memory, a
VGA display, and 80 MB of disk space.
guest6 20.05.2024 02:00 # 0
Windows applications relies on allocated resources remaining available
even after the application quits. For this reason, the resource cleanup
can't take place until the system notices that there are no 16-bit applications running.
Какой ротоёб'92
guest6 20.05.2024 02:06 # 0
guest6 20.05.2024 02:09 # 0
compatibility toolkit же
guest6 20.05.2024 02:16 # 0
https://govnokod.xyz/_11319/#comment-388889