1. Си / Говнокод #18214

    +142

    1. 1
    2. 2
    3. 3
    4. 4
    p_bmp280->calib_param.dig_P2 = (s16)(((
    (s16)((s8)a_data_u8[BMP280_PRESSURE_CALIB_DIG_P2_MSB]))
    << BMP280_SHIFT_BIT_POSITION_BY_08_BITS)
    | a_data_u8[BMP280_PRESSURE_CALIB_DIG_P2_LSB]);

    Требуется больше приведений

    из библиотеки для датчика давления BOSH280.
    PS s16 dig_P2;

    Запостил: MiD, 21 Мая 2015

    Комментарии (7) RSS

    • Все кто ниже - динозавры!
      Ответить
    • придираетесь к последнему уточняющему приведению?

      записано отвратительно
      в теории u8 -> s8 -> s16 смысл есть преобразовывать
      а на деле - только автору ведомо

      ps тут мог бы быть ваш аски-динозавр
      Ответить
      • в чём разница?
        https://ideone.com/eeIH4T
        Ответить
        • Как говорила моя бабушка, "Не путай хуй с пальцем".
          Ответить
          • мудрая бабуля, но это не даёт конкретики
            Ответить
        • > в чём разница

          а вот, кстати, предлагаю обсудить

          C11 6.5.7 Bitwise shift operators
          /4
          The result of E1 << E2 is E1 left-shifted E2 bit positions; vacated bits are filled with zeros. If E1 has an unsigned type, the value of the result is E1×2^E2, reduced modulo one more than the maximum value representable in the result type. If E1 has a signed type and nonnegative value, and E1×2^E2 is representable in the result type, then that is the resulting value; otherwise, the behavior is undefined.

          с другой стороны

          /3
          The integer promotions are performed on each of the operands. The type of the result is that of the promoted left operand.

          т.е. если я правильно понял стандарт, битовый сдвиг самостоятельно сделает конверсию signed char -> signed int, сделает сдвиг, а далее уже этот signed int присвоится, например, int16_t
          Ответить
          • Ну это и логично, ведь главный принцип из меньшего в большее никто не отменял. Тут основной вопрос со знаком, поэтому в начале u8 перегоняем в s8
            Ответить

    Добавить комментарий