Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
7 / 7 / 0
Регистрация: 14.03.2013
Сообщений: 222
1

Не срабатывает логическое суммирование для char значений

20.08.2019, 12:48. Показов 965. Ответов 1
Метки нет (Все метки)

Всем привет. Не могу понять из-за чего не срабатывает логическое суммирование
для массива char (1 байт), в отличие от массива short (2 байта).
Имеется код:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
 
using namespace std;
 
int main()
{
    // 0xFFEEDDCC
    char byte[4] = {char(0xCC), char(0xDD), char(0xEE), char(0xFF)}; // <-- для этого случая НЕ срабатывает
    //short byte[4] = {0xCC, 0xDD, 0xEE, 0xFF}; // <-- для этого случая срабатывает корректно
 
    unsigned int sum = 0;
 
    for (int i = 0; i < 4; i++)
        sum |= (unsigned int)(byte[i] << i*8); // для char массива не срабатывает суммирование...
 
    cout << hex << sum << endl;
 
    return 0;
}
Для short массива выводится корректное значение: 0xFFEEDDCC а для char не срабатывает.
Прошу подскажите.
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.08.2019, 12:48
Ответы с готовыми решениями:

Группировка по константе и суммирование значений в столбце для нее
Есть запрос и вывод на картинках. В общем нужно, чтобы выводило все в четыре строки (для каждого...

Суммирование 2-х переменных типа Char
Снова такая проблема.... есть 2 переменные char x='1'; char y='2'; мне нужно...

char* : принудительно задано логическое значение 'true' или 'false'
Почему-то выводит в textbox3 вместо сообщении об ошибке TRUE, и иногда появляется...

char* : принудительно задано логическое значение 'true' или 'false'
Почему-то выводит в textbox3 вместо сообщении об ошибке TRUE, и иногда появляется...

1
2146 / 691 / 265
Регистрация: 10.02.2018
Сообщений: 1,622
20.08.2019, 13:09 2
Лучший ответ Сообщение было отмечено oleggy как решение

Решение

Как я понимаю, так происходит из-за старшего бита char и особенности отрицательных чисел.
Можно заменить 14 строку на такую:
C++
1
2
//sum |= (unsigned int)(byte[i] << i*8); // для char массива не срабатывает суммирование...
sum |= ((unsigned char)byte[i]) << i*8;
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.08.2019, 13:09

Как изменить свойство Visible/Enable у кнопки на форме по команде из UserControl и почему не срабатывает логическое И?
Всем привет. Вроде уже не нуб в шарпе, но тут с элементарным запарился. Вопросов 2 : 1. Есть...

Условие типа if( масив типа char[x] [y] != переменная типа char) не срабатывает
Создал функцию ChangeWay(). Все, кроме if(map !=ar) (обе переменные типа char) работает...

Суммирование значений
Здравствуйте. Допустим есть список студентов и каждый состоит в определенной группе. Как можно...

Суммирование значений
Здравствуйте. Подскажите пожалуйста с запросом. Имеется к примеру следующая таблица:...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.