Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
Вот почему [upd: очепятки] 08.08.05 17:17 Число просмотров: 1775
Автор: leo <Леонид Юрьев> Статус: Elderman Отредактировано 08.08.05 17:22 Количество правок: 3
|
> В виндах: в вижула сях, в 1С, в некоторых SQL и через раз в > калкуляторе (особенно если в десятичном виде считать) > > DB2DCD5700000000 > + > 000000000C0000000 > = > DB2DCD56C0000000 !!! > > Почему?!
В "неправильно" считающих системах это будет соответствовать С-коду:
int m_h = -617755305; // == 0xdb2dcd57;
int m_l = -1073741824; // == 0xc0000000;
__int64 mantissa = (((__int64)m_h) << 32) + (__int64) m_l; // -2653238832979247104 == 0xdb2dcd56c0000000 ---
В "правильно" считающих системах это будет соответствовать С-коду:
unsigned int m_h = 3677211991; // == 0xdb2dcd57;
unsigned int m_l = 3221225472; // == 0xc0000000;
unsigned __int64 mantissa = (((unsigned __int64)m_h) << 32) + (unsigned __int64) m_l; // 15793505245025271808 == 0xdb2dcd56c0000000 ---
Или, другими словами, знаковое расширение 0xc0000000 до 64 бит дает -1 в старшей половине, поэтому из 7 получается 6. Если расширение беззнаковое, то результат вычисляется "правильно".
|
|
|