Относительно числового представления - PullRequest
0 голосов
/ 13 апреля 2011

Как мне найти представление числа для системы, в которой я работаю?

Ответы [ 4 ]

0 голосов
/ 14 апреля 2011

Архитектурные вопросы, такие как представление (размер слова, два - один комплемент против величины знака) и порядковый номер, лучше всего решаются с помощью документации по аппаратному обеспечению и / или ОС и / или компилятору.

Вы можете использовать тип punning для проверки отдельных байтов значения:

T value = ...; // for some numeric type T (int, short, long, double, float, etc.)
unsigned char *p = (unsigned char*) &value;
size_t i;

printf("%10s%8s\n", "address", "value");
printf("%10s%8s\n", "-------", "-----");
for (i = 0; i < sizeof value; i++)
  printf("%10p%8x\n", p+i, (unsigned int) p[i]);

Для старшего и младшего байтов вы можете сделать что-то вроде

unsigned int value = 0x01;
unsigned char *p = (unsigned char *) &value;
if (p[0] == 1)
  printf("Little-endian\n");
else if (p[sizeof value - 1] == 1)
  printf("Big-endian\n");
else
  printf("Weird\n");

Хотя лучше до RTM.

0 голосов
/ 13 апреля 2011

Обычным способом является сохранение номера в памяти, а затем проверка памяти.

volatile number_type x;
x = 512.123;

typedef unsigned char const volatile uccv;
uccv *c = reinterpret_cast< uccv * >( & x );
std::cout << std::hex;
std::cout.fill( '0' );
for ( uccv *pen = c; pen != c + sizeof x; ++ pen ) {
    std::cout.width( 2 );
    std::cout << static_cast< unsigned >( * pen );
}
std::cout << std::dec << '\n';

Извинения за volatile;Я не вспоминаю строгих правил псевдонимов и не хочу сейчас их искать.

0 голосов
/ 14 апреля 2011

Знать представление знака на самом деле довольно просто.Посмотрите на результат

(favoriteType)-1 & (favoriteType)3 

Как только вы поймете, как работают три различных представления знака, которые позволяет C (см., Например, ответ Acme), вы легко определите значения такого выражения для них.

0 голосов
/ 13 апреля 2011

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

Однако они работают на квантовых компьютерах , которые работают совершенно по-другому и представляют числа совершенно по-другому.

...