|
Регистрация | Файлы | Правила | Альбомы | Дневники | Справка | Пользователи | Календарь | Поиск | Сообщения за день | Все разделы прочитаны |
Прочая документация Помощь, книги, инструкции, описания |
|
Опции темы | Поиск в этой теме | Опции просмотра |
09.05.2010, 00:18 | #1 |
just a lazy user
Регистрация: 07.03.2010
Адрес: Киев
Сообщений: 31
Сказал(а) спасибо: 48
Поблагодарили 31 раз(а) в 11 сообщениях
|
В общем, вижу, много вопросов задается на одни и те же темы, решил создать. Просьба писать только по существу - дополнять эти мануалы, никакого обсуждения/флуда.
Начну с того, что уже написал в другой теме. И так, некоторые поля в файле конфигурации (mangosd.conf, realmd.conf) являются битовыми масками (bitmask) -UsedProcessors и т.д. Так как многие новички не понимают, что это такое, объясню. Чтобы понять что это такое, нужно научиться переводить числа между разными системами исчисления. Для начала научимся переводить из любой системы в нашу привычную - десятичную. Именно в десятичной системе записываются все параметры в mangosd.conf. Битовая операция в программировании — некоторые операции над цепочками битов. В программировании, как правило, рассматриваются лишь некоторые виды этих операций: логические побитовые операции и битовые сдвиги. Битовые операции применяются в языках программирования и цифровой технике, изучаются в дискретной математике. Чтобы перевести число из любой системы счисления в десятичную нужно: Каждую исходную цифру умножить на основу системы, поднесенную в степень - номер цифры начиная с нуля, считать СПРАВА, и полученные числа просуммировать. Примеры: Из двоичной 10111: 1*(2^0)+1*(2^1)+1*(2^2)+0*(2^3)+1*(2^4) Из троичной 122012: 2*(3^0)+1*(3^1)+0*(3^2)+2*(3^3)+2*(3^4)+1*(3^5) Из восьмиричной 765: 5*(8^0)+6*(8^1)+7*(8^2) --------- Битовая маска - число в двоичной системе. В параметре UsedProcessors каждый бит указывает включено ли ядро. 0 - означает ядро выключено, 1 означает ядро включено. Нам нужно включить четыре ядра - нужно число 1111 1*(2^0)+1*(2^1)+1*(2^2)+1*(2^3)=1*1 + 1*2 + 1*4 + 1*8=1+2+4+8=15. Значит, UsedProcessors=15. Или, например, нужно включить только 2 ядра: нужно число 11 1*(2^0)+1*(2^1)=1*1 + 1*2=1+2=3. Значит, UsedProcessors=3. --------- В каждой системе счисления столько цифр, какая у неё основа 2: 2 цифры: 0, 1 3: 3 цифры: 0, 1, 2 5: 5 цифер: 0, 1, 2, 3, 4 8: 8 цифер: 0, 1, 2, 3, 4, 5, 6, 7 16: 16 цифер: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F a,b,c,d,e,f - тоже цифры. Просто в 16-ричной системе должно быть 16 цифр, а мы знаем только 10. Поэтому берут, что: A = 10 B = 11 C = 12 D = 13 E = 14 F = 15 ---- Из 16-ричной системы перевести в нашу (десятичную) переводим точно так же: Число 18AF42C 12*(16^0) + 2*(16^1) + 4*(16^2) + 15*(16^3) + 10*(16^4) + 8*(16^5) + 1*(16^6) = 25883692 ------------- Между 2-, 8-, 10-, 16-ричными системами умеет переводить калькулятор винды в режиме "Инженерный". Сверху слева при этом выбирается текущая система: Bin - двоичная Oct - восьмиричная Dec - десятичная (наша) Hex - шестнадцатиричная
__________________
Так как нету кнопки "Фууу", скажу вам прямо... (c) Последний раз редактировалось Foks; 09.05.2010 в 00:28. |
13 пользователя(ей) сказали cпасибо: | D_f (09.05.2010), Hantet (26.05.2010), Konctantin (09.05.2010), lina (25.05.2010), Lordronn (02.02.2012), lovepsone (02.02.2012), MangMan (24.07.2010), partizanes (22.03.2012) |
02.02.2012, 17:15 | #2 |
Ученый
Регистрация: 07.03.2010
Адрес: Беларусь,Брест
Сообщений: 188
Сказал(а) спасибо: 131
Поблагодарили 34 раз(а) в 27 сообщениях
|
У меня назрел вопрос! А как прочитать к примеру вот такой код 0x0002
Прочитав ваш мануал и потренировавшись я так понял это троичная форма, так как есть 2 и 0 (либо я не правильно понял)! А как понять что здесь обозначает x
__________________
sql-language.ru |
02.02.2012, 17:59 | #3 |
WowCore Dev
Регистрация: 11.03.2010
Сообщений: 112
Сказал(а) спасибо: 10
Поблагодарили 51 раз(а) в 25 сообщениях
|
Это не троичная форма.
Троичная форма в доке была преведена просто как пример. Это обычная 16-ричная форма. Об этом говорит префик "0x" перед числом. |
Пользователь сказал cпасибо: | lovepsone (02.02.2012) |
02.02.2012, 18:34 | #4 |
Ученый
Регистрация: 07.03.2010
Адрес: Беларусь,Брест
Сообщений: 188
Сказал(а) спасибо: 131
Поблагодарили 34 раз(а) в 27 сообщениях
|
Ясно, но все таки как перевести в обычное число? Может х знак умножения ?
__________________
sql-language.ru Последний раз редактировалось lovepsone; 02.02.2012 в 18:38. |
02.02.2012, 18:49 | #5 | |
Умный
Регистрация: 07.03.2010
Адрес: Северный Урал (60°сш, 60°вд)
Сообщений: 330
Сказал(а) спасибо: 82
Поблагодарили 399 раз(а) в 120 сообщениях
Записей в дневнике: 30
|
два, она и в Африке два. А здесь это два в шестнадцатеричной.
0x - префикс, который обозначает, что то что записано сразу за ним - 16-чное число и равно оно 0002, т.е. ДВА. а в пхп !? вот читай - http://www.php.net/manual/ru/language.types.integer.php Цитата:
Присвой переменной и приведи переменную к целому числу. ПХП сам переведет. Пример: $a = 0x00020; echo (int)$a; и тебе напечатает - 32 (десятичное). |
|
02.02.2012, 18:53 | #6 |
Ученый
Регистрация: 07.03.2010
Адрес: Беларусь,Брест
Сообщений: 188
Сказал(а) спасибо: 131
Поблагодарили 34 раз(а) в 27 сообщениях
|
то есть 0x показывает на то что это 16-чное число и больше нечего ? А дальше 00020 можно самому подсчитать:
0*(16^0)+2*(16^1)+0*(16^2)+0*(16^3)+0*(16^4) = 32 Спасибо что не поленились мне все объяснить, из поста от Deamon, я плохо вчитался и не понял сути!
__________________
sql-language.ru |
02.02.2012, 20:16 | #7 | |
Ученый
Регистрация: 02.04.2010
Сообщений: 237
Сказал(а) спасибо: 41
Поблагодарили 99 раз(а) в 44 сообщениях
|
Цитата:
__________________
SpellWork Qt4 |
|
Метки |
битовые операции |
Опции темы | Поиск в этой теме |
Опции просмотра | |
|
|