Arhn - архитектура программирования

Как я могу безопасно преобразовать целое число в битовое поле в контексте побитового или?

Ранее я задал этот вопрос и получил ответ, который работал для приведенного мной примера, но, похоже, не обобщается на побитовое ИЛИ . Вот пример из этого вопроса, но с добавлением побитового ИЛИ.

#include <stdint.h>

struct MaskAndCount{
    uint64_t occupied : 56;
    uint8_t numOccupied : 8;
};

int main(){
    int count = 7;
    MaskAndCount foo;
    foo.occupied &= ~(1L << count) & 0x00FFFFFFFFFFFFFF;
    foo.occupied |= (1L << count) & 0x00FFFFFFFFFFFFFF;
}

Теперь, когда мы компилируем, мы не получаем предупреждение из первой строки, но получаем предупреждение из второй строки.

g++ -Wconversion Main.cc
Main.cc: In function ‘int main()’:
Main.cc:12:18: warning: conversion to ‘long unsigned int:56’ from ‘long unsigned int’ may alter its value [-Wconversion]
     foo.occupied |= (1L << count) & 0x00FFFFFFFFFFFFFF;

Снова задам те же два вопроса.

  1. Будет ли преобразование, как написано, иметь желаемый эффект усечения старших битов значения справа?
  2. Есть ли способ отключить предупреждение локально или выразить то же поведение с другим синтаксисом, который не вызывает предупреждение?
05.10.2016

  • Хороший парень. Ведущий их собственный поиск обмана. 05.10.2016
  • Вы пометили свой вопрос для закрытия? Я не думаю, что когда-либо видел это раньше. 05.10.2016
  • @MarkRansom Я видел это несколько раз раньше и делал сам. 05.10.2016

Новые материалы

Коллекции публикаций по глубокому обучению
Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

Представляем: Pepita
Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

Советы по коду Laravel #2
1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

3 способа решить квадратное уравнение (3-й мой любимый) -
1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

Создание VR-миров с A-Frame
Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

Демистификация рекурсии
КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..