Битовые операторы для добавления двух беззнаковых символов в C++

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

В C++ скажи, что у меня есть

unsigned char t = 0xc2;  // 11000010
unsigned char q = 0xa3;  // 10100011

Я хочу как-то, 1100001010100011, возможно ли это с помощью побитовых операторов?

Я хочу извлечь двоичную форму t и q и добавить их ...

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
4 228
6

Ответы 6

В двоичном / шестнадцатеричном формате нет добавления, потому что вы имеете дело с числами (можете ли вы добавить 1 и 2 и не путать полученные 12 с «настоящими» 12?)

Вы можете разделить их каким-нибудь специальным символом, но вы не можете просто «объединить» их.

Ваш пример на самом деле не работает слишком хорошо, потому что ширина (обычно 8 бит) входных значений не определена. Например, почему не ваш пример: 0000000100000010, который действительно добавлял бы 1 (00000001) и 2 (00000010) побитно.

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

Обновлено: если ваша «ширина» определена как полная ширина с удаленными ведущими нулями, то это можно сделать со сдвигом и операцией ИЛИ, но более сложным.

Добавление в качестве операции не имеет смысла для чисел, независимо от того, в какой базе они находятся. Использование. в качестве оператора конкатенации: в вашем примере 0x1. 0x2 становится 0x12, если вы объединяете шестнадцатеричный код, и 0b101, если вы объединяете двоичный файл. Но 0x12 и 0b101 не одно и то же значение (в базе 10 это 18 и 5 соответственно). В общем, A O B (где A и B - числа, а O - оператор) должны давать одно и то же значение независимо от того, на какой базе вы работаете.

он просит это в двоичном формате = P. это четко определенная операция. это также может быть полезно при выполнении таких вещей, как кодирование Хаффмана.

Claudiu 02.11.2008 21:32

Да, это возможно.

Просто используйте оператор сдвига влево, сдвигая влево на 8, используя как минимум 16-битное целое число. Затем двоичное ИЛИ 2-е значение на целое число.

unsigned char t = 0xc2; // 11000010 
unsigned char q = 0xa3; // 10100011
unsigned short s = (((unsigned short)t)<<8) | q; //// 11000010 10100011

В качестве альтернативы объединение обоих значений в объединение, содержащее 2 символа (с обратным порядком байтов или малым), приведет к одинаковому результату битового уровня. Другой вариант - char [2].

В вашем последнем предложении, предполагая, что вы говорите об объединении char [2] с сокращением, это зависит от порядка байтов.

Jim Buck 02.11.2008 22:38

плюс, если вы используете << 8 для беззнакового char, вы получите ноль (поскольку беззнаковый char составляет 8 бит, вы сдвигаете все биты за пределы диапазона). Перед сменой произнесите t на короткое время.

OJ. 07.11.2008 14:47

@OJ. Математические операции C продвигают символы и short до int, поэтому нет необходимости приводить

phuclv 26.12.2013 17:15

Объединение двух символов:

unsigned char t = 0xc2;  // 11000010
unsigned char q = 0xa3;  // 10100011

int result = t;  // Put into object that can hold the fully concatenated data;
result <<= 8;     // Shift it left
result |= q;     // Or the bottom bits into place;

Я бы пошел с массивом символов.

беззнаковые короткие s; char * sPtr = & s; sPtr [0] = t; sPtr [1] = q;

Это на самом деле не заботится о порядке байтов .. Я не уверен, зачем вам это нужно, но это сработает.

Проблема с битовыми методами заключается в том, что вы не знаете, какой у вас размер. Если вы знаете размер ... Я бы пошел с ответом Брайанса

Другие вопросы по теме