Безопасно ли сравнивать (uint32_t) с жестко заданным значением?
Мне нужно делать побитовые операции над 32-битными целыми числами (которые действительно представляют символы, но все что угодно).
Является ли следующий вид кода безопасным?
uint32_t input;
input = ...;
if(input & 0x03000000) {
output = 0x40000000;
output |= (input & 0xFC000000) >> 2;
Я имею в виду, что в операторе "if" я делаю побитовую операцию с левой стороны, над uint32_t и с правой стороны... Я не знаю!
Итак, вы знаете тип и размер (под этим я подразумеваю, сколько байтов он хранится) жестко закодированного "0x03000000"?
Возможно ли, что некоторые системы рассматривают 0x03000000 как int и, следовательно, кодируют его только в 2 байта, что будет катастрофическим?
1 ответ
Является ли следующий вид кода безопасным?
Да, это.
Итак, вы знаете тип и размер (под этим я подразумеваю, сколько байтов он хранится) жестко закодированного "0x03000000"?
0x03000000
является int
в системе с 32-bit
int
а также long
в системе с 16-bit
int
,
(Как uint32_t
присутствует здесь, я предполагаю, что два дополнения и CHAR_BIT
из 8
, Также я не знаю ни одной системы с 16-bit
int
а также 64-bit
long
.)
Возможно ли, что некоторые системы рассматривают 0x03000000 как int и, следовательно, кодируют его только в 2 байта, что будет катастрофическим?
См выше на 16-bit
int
система, 0x03000000
это long
и является 32-bit
, Шестнадцатеричная константа в C - это первый тип, в котором она может быть представлена: int
, unsigned int
, long
, unsigned long
, long long
, unsigned long long