Если вы на самом деле используете значения как битовые поля, что означает сравнение битовых полей разных размеров?Будет ли это для вас значимым результатом?
При этом оба операнда будут переведены в минимальный размер int
/ unsigned
со знаком, в зависимости от подписи оригинальных операндов.Затем эти повышенные значения будут сравниваться с побитовым оператором.
Это ведет себя как ваш второй пример: меньший дополняется нулями на стороне MSB (толкается на сторону LSB, если вы предпочитаете).
Если один операнд подписан и отрицателен, а другой - без знака, отрицательный будет преобразован в конгруэнтное число без знака до выполнения битовой операции.
Если вместо целых чисел вы имеете в виду std::bitset
,Вы не можете выполнять побитовые операции над наборами битов разных размеров.