![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| inside_pointer |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 344 Регистрация: 9.3.2008 Репутация: 5 Всего: 12 |
Описание темы не пишу, потому что оно сканирует форум и выключает все окна файрфокса.
Цитата из К&R
Вопросы: что за младшие биты, а что есть старшие ещё, а бит знака как работает, он где слева или справа, при каких значениях бита знак будет минус при каких плюс? Ещё: Это что двоичное число или восьмеричное, если это восьмеричное, то оно переводится в двоичную а потом происходит операция сравнения битов? Бывает ещё константы задаются в виде a = 01, b = 04 это какие числа, восьмеричные или какие-то другие? Это сообщение отредактировал(а) inside_pointer - 11.3.2008, 04:17 |
|||
|
||||
| korian |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 651 Регистрация: 8.3.2008 Где: Украина, Харьков Репутация: 3 Всего: 17 |
0123 - восмеричное
123 - десятичное 0x123 - шестнадцатиричное
если брать 8-и битовое число 00000001 - младший бит (во всех системах измерения равно еденице) 10000000 - старший бит (128, 0200, 0x80) если тип знаковый (signed), то старший бит является знаковым (установлен, если число отрицательное)
в компах все представилено в двоичном виде. (все данные "переводятся" в двоичную форму, если можна так выразиться) битовые операция производяться вне зависимости от того, имеет ли число знак или что либо еще. каждый бит сравнивается со своим битом. long a = -10; // 0xFFFFFFF6 a = a & 0x80000000; //a будет равно -2147483648 (0x80000000); unsigned long b = 10; // 0x0000000A b = b | 0x80000000; //b будет равно 2147483658 (0x8000000A); для битовых операций есть смысл использовать 8-и или 16-иричные числа, т.к. в 8-ричной системе 1 цифра отвечает за 3 бита (07 = 111) а в 16-ричной 1 цифра отвечает за 4 бита (0xF = 1111) в десятичной системе, таких зависимостей нету. Это сообщение отредактировал(а) korian - 11.3.2008, 04:58 |
||||
|
|||||
| inside_pointer |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 344 Регистрация: 9.3.2008 Репутация: 5 Всего: 12 |
спасибо, korian, исчерпывающе
0177 0 - признак восьмеричности, отбрасываем 177 раскладываем по тройкам 001 111 111 тут получилось 9 цифр, а в байте 8 бит, отбрасываем первый ноль 01 111 111 дальше n = n & 0177 превратилось в n = n & 01 111 111
значит младшие биты это те, которые справа, а старшие те, которые слева левые - старшие правые - младшие правые семь бит не обнуляются, это в каком случае, когда n = 11 111 111 чтоли ? там в книжке просто n и всё, не сказано чему равно |
|||
|
||||
| korian |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 651 Регистрация: 8.3.2008 Где: Украина, Харьков Репутация: 3 Всего: 17 |
в зависимости от n получаем результат n = 012 //00001010 n = n & 0177 // 00001010 & 01111111 = 00001010 n = 0377 //11111111 n = n & 0177 // 11111111 & 01111111 = 01111111 т.е. при данной операции 7 младших битов будут такими же, как и у числа n остальные биты будут нулями. |
|||
|
||||
| inside_pointer |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 344 Регистрация: 9.3.2008 Репутация: 5 Всего: 12 |
Всё терь понял до конца, спасибо.
|
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |