如何找到我所在系统的编号表示?
答案 0 :(得分:0)
AFAIK每个现代计算机在表示数字时都使用二进制。其他类型的计算机已经进行了实验,但它们未能与二进制文件竞争。
然而,他们正在使用quantum computers工作完全不同,并以完全不同的方式表示数字。
答案 1 :(得分:0)
通常的方法是将号码存储在内存中,然后检查内存。
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
的道歉;我不记得严格的别名规则,现在也不想查找它们。
答案 2 :(得分:0)
要知道符号表示实际上非常简单。看看
的结果(favoriteType)-1 & (favoriteType)3
一旦你理解了C允许的三种不同的符号表示如何工作(参见例如Acme的答案),你就可以很容易地计算出这种表达式的值。
答案 3 :(得分:0)
使用硬件和/或操作系统和/或编译器文档可以最好地回答诸如表示(字大小,二次与一次补充与符号大小)和字节序等架构问题。
您可以使用类型双关语来检查值的各个字节:
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]);
对于big-versus-little-endian,你可以做类似
的事情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更好。