3 / 3 / 0
Регистрация: 07.11.2018
Сообщений: 119
|
|
1 | |
С какой стороны 1 байт в двочной системе?11.05.2019, 13:02. Показов 4942. Ответов 29
Метки нет (Все метки)
0
|
11.05.2019, 13:02 | |
Ответы с готовыми решениями:
29
Почему на указатель в 64-разрядной системе выделяется 8 байт памяти, а в 32-разрядной системе - 4 байта? Найти с какой стороны цикл будет находить 0 скорее и на какой позиции он стоит Массив байт должен хранить строку и цифры. Передача по удп в обе стороны Ввести байт в двоичной системе и вывести в десятичной |
12.05.2019, 15:40 | 21 |
Если ты говоришь о языке программирования, то минимальная единица, которая пишется в память - это байт. В том смысле, что на уровне программы ты можешь записать по адресу 0, по адресу 1 и т.п. Получается так, что байт - это некая абстракция, которая инкапсулирует внутри себя 8 бит. Абстракцию позволено только прочитать или записать целиком. Как ориентированы биты внутри байта - это детали реализации, спрятанные внутри абстракции, и при этом нету интерфейсов для того, чтобы прочитать бит номер 0, бит номер 1 и т.п. Операции чтения и записи байтов имеют интерфейсное соглашение, что они оперируют значением, которое состоит из 8 бит и в записи этого значения старшие биты печатаются слева. Т.е. когда ты читаешь байт, то получаешь на руках не 8 отдельных битов, а некое значение, в котором эти биты ориентированы в определённом порядке. А если посмотреть на реальное внутреннее устройство байта, то там может быть значения отдельных битов расположены снизу вверх, или по диагонали, или в узлах куба. Т.е. в том, как реально расположены биты внутри памяти, нету таких понятий как "слева" или "справа"
Так понятно? А... ты это имел в виду
1
|
12.05.2019, 15:47 | 23 |
Программу лучше бы переписать вот так:
C #include <stdio.h> int a = 0x002233ff; int main (void) { int n; /* Печать отдельных байтов * Результат зависит от endian'а */ for (n = 0; n < sizeof (a); n++) printf ("%x ", ((unsigned char*)&a)[n]); printf ("\n"); /* Печать отдельных битов /* Результат НЕ зависит от endian'а */ for (n = 0; n < (8 * sizeof (a)); n++) printf ("%d ", (a >> n) & 1); printf ("\n"); return 0; } Код
# intel (little endian) $ ./a.out ff 33 22 0 1 1 1 1 1 1 1 1 1 1 0 0 1 1 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 Код
# sparc (big endian) $ ./a.out 0 22 33 ff 1 1 1 1 1 1 1 1 1 1 0 0 1 1 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0
0
|
12.05.2019, 15:53 | 24 |
Evg, с абстракцией понятно (примерно все так и представляю).
В итоге ответ в посту 8 - "Порядок от младшего к старшему" верен, в нем есть смысл, если я работаю с байтом в коде, и я правлю в нем отдельные биты. Т.е. ответ по теме - "Порядок от младшего к старшему", т.е. байт инициированный десятичной "1" будет отражаться двоичном как "10000000", и битовые операции будут производится именно с таким порядком бит. Добавлено через 1 минуту поговорить с умным человеком, всегда приятно. Усилия не пропадут даром)
0
|
12.05.2019, 16:15 | 26 | ||||||||||
Если я знаю, что при работе в коде, байт инициированный десятичной "1" будет всегда (в любых компиляторах) отражаться в двоичном как "10000000", то при обращении к конкретным битам
0
|
зомбяк
1584 / 1218 / 345
Регистрация: 14.05.2017
Сообщений: 3,939
|
|
12.05.2019, 16:24 | 27 |
Байт - минимально доступная единица памяти, которая может обрабатываться процессором. Поэтому как-то получить неправильный порядок битов в ней можно только при неисправном/неправильно работающем железе.
Добавлено через 2 минуты Ну а операции сдвига всегда работают в понимании что у нас именно BigEndian. Точно так же как десятичное число 1000 мы никогда не подразумеваем в виде 0001
1
|
12.05.2019, 17:06 | 28 |
Выше было сказано, что
, поэтому правильный или неправильный порядок вопрос интерфейса к абстракции. Код в посте 8 указывает на то, что может быть порядок "от младшего к старшему", т.е. байт инициированный десятичной "1" отражается в двоичном как "10000000".
Или укажите где упускаю.
0
|
зомбяк
1584 / 1218 / 345
Регистрация: 14.05.2017
Сообщений: 3,939
|
|
12.05.2019, 17:24 | 29 |
Неправильно понял.Речь о порядке для нескольких байтов одного и того же числа. То есть если например у нас двухбайтовое число 3863, то на одних процессорах это будет "00001111 00010111" а на других "00010111 00001111". То есть меняются местами сами байты, но никак не биты в байтах.
0
|
Kuzia domovenok
|
12.05.2019, 17:26
С какой стороны 1 байт в двочной системе?
#30
|
Не по теме: отписался от говнотемы
0
|
12.05.2019, 17:26 | |
Как перевести строку в массив байт в шестнадцатеричной системе? Вывести каждый байт каждого числа в 16-тиричной системе счисления Как преобразовать байт-код (в шестнадцатеричной системе счисления) в команды assembler? Перевод числа из двочной в шестнадцатеричную систему счисления С какой стороны функция С какой стороны коллайдер? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |