Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
144 / 28 / 4
Регистрация: 06.05.2019
Сообщений: 1,839
Записей в блоге: 4

Почему 2 байта дают -240 а на 8ке - 65296?

11.02.2021, 15:02. Показов 2427. Ответов 41
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Я думал что число это всегда одинаковая последовательность бит но как оказалось нет. Вот как выглядит -240 на 2ке 1111111100010000 а так оно выглядит на 8ке 1111111111111111111111111111111111111111111111111111111100010000 уму не постижимо, вроде как в 2 байта должно влазить ан нет целый космос. Можно ли извлечь из 8ки эту часть 1111111100010000 таким образом чтобы получить -240 при том что остальные 6 байт с единицами могут отсутствовать? Оно его что ли читает справа налево или что.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.02.2021, 15:02
Ответы с готовыми решениями:

Isvalid в 7ке и 8ке
Всем привет! Тут столкнулся со странной проблемой. Код в 7ке и 8ке работает по разному. В 7ке документ не проходит проверку If...

flash - приложений на 8ке
Не получается запустить ряд flash-приложений на 8ке, те же приложение на xp работают исправно. Запуск от администратора и в режиме...

Почему программистам редко дают?
Добрый день уважаемые! Давно меня мучает вопрос: почему мы испытываем такие трудности в общении с противоположным полом и так редко...

41
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
11.02.2021, 23:24
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Nexi99 Посмотреть сообщение
Можно ли извлечь из 8ки эту часть 1111111100010000 таким образом чтобы получить -240 при том что остальные 6 байт с единицами могут отсутствовать?
Во-первых, действительно непонятно что такое "8ка". ( вопрос уже был задан выше, но вы его почему-то не заметили )

Во-вторых, если этим сокращением вы называете целое восьмибайтовое число, то непонятно как в нём могут отсутствовать 6 байтов.

Впрочем, дело тут вероятно в том, что
Цитата Сообщение от Nexi99 Посмотреть сообщение
У меня массив чар в него упакованы числа очень плотно
Но при этом вы не написали как именно они там упакованы.

Ну хотя бы пример привели бы конкретный: были такие-то данные, потом их упаковали и получили такой-то массив char.
0
144 / 28 / 4
Регистрация: 06.05.2019
Сообщений: 1,839
Записей в блоге: 4
12.02.2021, 01:14  [ТС]
Цитата Сообщение от likehood Посмотреть сообщение
то непонятно как в нём могут отсутствовать 6 байтов.
вот это я и имею в виду что 6 байт мне не нужны а по умолчанию туда единиц напихали а я про это не знал.
Цитата Сообщение от likehood Посмотреть сообщение
Но при этом вы не написали как именно они там упакованы.
Ну как упакованы 3 байта одно число, 3 байта другое число и т.д. а как их можно упаковать.
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
12.02.2021, 02:31
Цитата Сообщение от Nexi99 Посмотреть сообщение
1111111100010000
имея это число нужно получить это число 1111111111111111111111111111111111111111 11111111111111110001 0000
C++
1
2
    short s = -240;
    uint64_t u8 = s;
Добавлено через 5 минут
но надежнее все же байты перенести

Добавлено через 1 минуту
C++
1
2
3
short s = -240;
uint64_t u8 = static_cast<uint64_t>(-1); // максимальное значение все биты 1
*(reinterpret_cast<short*>(&u8)) = s;
0
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
12.02.2021, 06:14
Цитата Сообщение от SmallEvil Посмотреть сообщение
C++
1
2
short s = -240;
uint64_t u8 = s;
Так правильнее и проще. О правильном представлении отрицательного числа на платформе заботится компилятор.

Добавлено через 4 минуты
Цитата Сообщение от Nexi99 Посмотреть сообщение
3 байта одно число, 3 байта другое число и т.д. а как их можно упаковать.
Т.е. самодельное трёхбайтовое число со знаком нужно преобразовать и расширить, например, в int ?
0
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
12.02.2021, 08:10
Цитата Сообщение от Nexi99 Посмотреть сообщение
Ну как упакованы 3 байта одно число, 3 байта другое число и т.д. а как их можно упаковать.
Так что ли?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <cstdio>
#include <cstring>
 
int main()
{
    int x = -240;
    printf("original:  %d\n", x);
    
    char buf[3];
    memcpy(buf, &x, 3); // упаковываем
    printf("packed:    %hhx %hhx %hhx\n", buf[0], buf[1], buf[2]);
 
    int y = 0;
    if (buf[2] < 0) // проверяем старший байт
        y = ~y; // инвертируем биты
 
    memcpy(&y, buf, 3); // распаковываем
    printf("unpacked:  %d\n", y);
}
0
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
12.02.2021, 18:04
Цитата Сообщение от Nexi99 Посмотреть сообщение
Оно его что ли читает справа налево или что.
Одни машины хранят цифры многобайтовых чисел от младших к старшим, другие - от старших к младшим, а самые хитрые могут переключаться между способами хранения чисел.
https://en.cppreference.com/w/cpp/types/endian
0
144 / 28 / 4
Регистрация: 06.05.2019
Сообщений: 1,839
Записей в блоге: 4
12.02.2021, 19:45  [ТС]
Цитата Сообщение от politoto Посмотреть сообщение
Т.е. самодельное трёхбайтовое число со знаком нужно преобразовать и расширить, например, в int ?
Да я просто брал 1 2 3 4 5 6 7 8 перегонял в 8ку и на положительных числах проблем не было т.к. я не знал что такое может быть с отрицательными числами, то естественно обрадовался такому порядку вещей, а тут оказалось что пустую часть ячейки система заполняет единицами а с 0ми проблем не возникает

Добавлено через 3 минуты
Цитата Сообщение от likehood Посмотреть сообщение
memcpy(&y, buf, 3); // распаковываем
А вот это интересно только хотелось бы увидеть код и узнать насколько дорого это работает.

Добавлено через 4 минуты
Цитата Сообщение от politoto Посмотреть сообщение
Одни машины хранят цифры многобайтовых чисел от младших к старшим
Вы предлагает прочитать значение задам наперёд это тоже интересно. Я с этим классом не работал пока не понятно ничего хотелось бы примеров по больше.

Добавлено через 39 минут
Цитата Сообщение от DrOffset Посмотреть сообщение
Отрицательные числа в машине представляются в дополнительном коде.
некоторые отписываются что у некоторых старший бит всегда 0 то что тогда единицами будет заполнять начиная от старший бит-1 и до числа тоже будут едицы или как?
0
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
12.02.2021, 19:56
Цитата Сообщение от Nexi99 Посмотреть сообщение
хотелось бы увидеть код
Ничего не понимаю.
Вы цитируете мой код, и при этом говорите, что "хотелось бы увидеть код".
Ну, вот он перед вами, смотрите.
Или вы о чём-то другом?

Цитата Сообщение от Nexi99 Посмотреть сообщение
и узнать насколько дорого это работает
Есть только один способ это узнать. И вы знаете какой
0
144 / 28 / 4
Регистрация: 06.05.2019
Сообщений: 1,839
Записей в блоге: 4
12.02.2021, 20:00  [ТС]
Цитата Сообщение от likehood Посмотреть сообщение
Есть только один способ это узнать. И вы знаете какой
меня интересует как работает memcpy, как выглядит код функции, если он большой то этот способ в помойку, я так понимаю что memcpy копирует по-байтно в этом случае даже и рассматривать эту идею не стоит.
0
653 / 466 / 183
Регистрация: 23.04.2019
Сообщений: 1,987
12.02.2021, 20:04
Цитата Сообщение от Nexi99 Посмотреть сообщение
как выглядит код функции,
зависит от компилятора
gcc имплементация
0
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
12.02.2021, 20:18
Цитата Сообщение от Nexi99 Посмотреть сообщение
некоторые отписываются что у некоторых старший бит всегда 0 то что тогда единицами будет заполнять начиная от старший бит-1 и до числа тоже будут едицы или как?
Если старший бит 0, то это положительное число.
Просто повторите порядок действий, который я описал, или который был описан по ссылке на листочке, и все поймете.

Добавлено через 8 минут
Цитата Сообщение от AndryS1 Посмотреть сообщение
зависит от компилятора
Более того, это зависит от условий, в которых эта функция используется. В практически во всех современных компиляторах эта функция помимо приведенной реализации также является intrinsic и может быть при определенных условиях заменена на одну или несколько машинных инструкций.
Можно воочию увидеть здесь:
https://godbolt.org/z/3KTPa6

В первом случае размер данных не известен и был выполнен честный вызов функции из библиотеки.
Во втором случае размер данных известен (через параметр шаблона) и функция была заменена на быстрое копирование в несколько инструкций. Побайтового копирования удалось избежать.
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
12.02.2021, 20:24
Цитата Сообщение от DrOffset Посмотреть сообщение
Просто повторите порядок действий, который я описал, или который был описан по ссылке на листочке, и все поймете.
Не факт, человек копает глубок, а понимает мелко, вот и получается, что ничего не получается...
А задачи так и нет. Что, куда, зачем нужно упаковать ?
Какие то обрывки каких то абстрактных вопросов, ни к чему не привязанных...
И вообще, последний раз захожу на темы от Nexi99, удачи.
1
1 / 1 / 2
Регистрация: 25.05.2015
Сообщений: 33
13.02.2021, 11:43
ТС, прежде чем "упаковывать" числа, следует ознакомиться с хранением и представлением информации в вычислительных устройствах,типами памяти, устройством АЛУ. Иначе подобные "геморрои" будут лишь множиться.
0
144 / 28 / 4
Регистрация: 06.05.2019
Сообщений: 1,839
Записей в блоге: 4
14.02.2021, 00:58  [ТС]
Цитата Сообщение от basileus Посмотреть сообщение
ТС, прежде чем "упаковывать" числа, следует ознакомиться с хранением и представлением информации в вычислительных устройствах,типами памяти, устройством АЛУ. Иначе подобные "геморрои" будут лишь множиться.
Ну блин ребята откуда мне это всё знать.
0
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
14.02.2021, 01:17
Цитата Сообщение от Nexi99 Посмотреть сообщение
откуда мне это всё знать.
Стержень знаний, которые затрагивают несколько последних ваших тем, в нужном объеме предоставляют первый курс и первый семестр второго курса любой специальности в ВУЗе, связанной с вычислительными машинами.

Если вы подобного образования не получали, то вам придется взять книгу, учебник, и все это самостоятельно изучить. Иначе вы не сможете быть программистом.

Только не надо опять говорить про десятки лет на чтение книг. Весь необходимый материал студенты получают, между прочим в совокупности с огромным количеством знаний по другим предметам, за полтора года максимум.
2
144 / 28 / 4
Регистрация: 06.05.2019
Сообщений: 1,839
Записей в блоге: 4
14.02.2021, 04:16  [ТС]
Цитата Сообщение от DrOffset Посмотреть сообщение
Стержень знаний, которые затрагивают несколько последних ваших тем, в нужном объеме предоставляют первый курс и первый семестр второго курса любой специальности в ВУЗе, связанной с вычислительными машинами.
Если вы подобного образования не получали, то вам придется взять книгу, учебник, и все это самостоятельно изучить. Иначе вы не сможете быть программистом.
Только не надо опять говорить про десятки лет на чтение книг. Весь необходимый материал студенты получают, между прочим в совокупности с огромным количеством знаний по другим предметам, за полтора года максимум.
Получил жестокий опыт. Проблему решил конечно но это не мудро так делать. Ну раз сделали есть тут и изюмина. Есть ещё много чего что встретится нам на пути, почему то ни в одном блоге я про такое не читал ну да ладно нужно идти дальше жизнь слишком коротка, меня не удивляет почему всё ПО так крыво работает.
0
14.02.2021, 06:40

Не по теме:

Цитата Сообщение от Nexi99
ни в одном блоге я про такое не читал ну да ладно нужно идти дальше жизнь слишком коротка
Поэтому не стоит тратить время на чтение ненужных блогов.

0
144 / 28 / 4
Регистрация: 06.05.2019
Сообщений: 1,839
Записей в блоге: 4
14.02.2021, 07:54  [ТС]
Цитата Сообщение от politoto Посмотреть сообщение
Поэтому не стоит тратить время на чтение ненужных блогов.
Если бы я вас не читал как бы я учился. Вот такая вот мораль
0
842 / 351 / 68
Регистрация: 20.11.2012
Сообщений: 844
14.02.2021, 08:13
Цитата Сообщение от Nexi99 Посмотреть сообщение
Если бы я вас не читал как бы я учился.
Если бы прочитали Таненбаума "Архитектура компьютера", то многих вопросов бы не возникло. Там и про память и про регистры (недавно вопрос от вас был) и про хранение чисел. Это как бы база.
0
14.02.2021, 08:26

Не по теме:

Цитата Сообщение от DrOffset Посмотреть сообщение
Стержень знаний, которые затрагивают несколько последних ваших тем, в нужном объеме предоставляют первый курс и первый семестр второго курса любой специальности в ВУЗе, связанной с вычислительными машинами.
Если взять конкретно эту тему, то эти знания дают уже в школьном курсе информатики.

Но, думаю, проблема ТС'а далеко не в отсутствии информации и никакими курсами этого не исправить.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.02.2021, 08:26

не понимаю почему дают не полный бал
=======(мой код)====== Flag = True v = present = {} vowel = &quot;аоэеиыуёюяАОЭЕИЫУЁЯ&quot; m, k = 0, 0 while Flag: string =...

Длина передаваемого сообщения - почему 1024 байта?
Не единожды натыкался на примеры, в том числе и в официальной документации, в которых для передачи сообщений использовался массив на 1024...

Почему динамическая память распределяет только 4 байта?
Всем привет! вопрос в том, почему динамическая память распределяет не 56 байт а только 4? Код: #include &lt;stdio.h&gt; #include...

Почему везде в гугле написано что long = 4 байта
почему везде в гугле написано что long = 4 байта? int же 4 байта, но они же не могут быть равными ! как это понимать? разве long не 8 байт?...

Почему производители уже лет семь не дают повышения производительности?
почему производители уже лет семь не дают повышения производительности? Причем это ограничение не только по железу. Явно сговорились с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет. Но обычно это 50 лет и более. Наверное, закисление почвы происходит сезонно в средней. . .
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи. Через несколько переработок от PHP кода к C89 (надеюсь, 89). Но довольно запутанно получилось. Код для Linux. Но если убрать time и то, что с ним. . .
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
rest api anylogic - выполнение модели на своём русском сайте
anaschu 02.07.2026
Как подружиться с AnyLogic Cloud API, победить провайдеров и развернуться Java-бэкенд в Docker на бесплатном хостинге: Двухдневный лог борьбы Всем привет! Хочу поделиться свежим (и довольно. . .
Где деньги лежат
kumehtar 02.07.2026
Это - японская подводная лодка I-52 (тип C2, кодовое имя Momi) вышла из Японии в марте 1944 года с миссией в оккупированную немцами Францию (Лорьян). Это была одна из «Янаги»-миссий по обмену. . .
Krabik для WoW 3.3.5a, многоязычный
AmbA 02.07.2026
Допилил бота, думаю что окончательно. Изменения: - добавлена многоязычность - добавлено снятие скриншотов - добавлено поддержание бафов хождения по воде (для жреца, дк и шамана) - и так, по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru