如何找到我所在系统的数字表示?
AFAIK每个现代计算机在表示数字时都使用二进制。 已经与其他类型的计算机进行了实验,但他们未能与二进制文件竞争。
然而,他们正在研究一种完全不同的量子计算机 ,并以完全不同的方式表示数字。
通常的方法是将数字存储在内存中,然后检查内存。
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
道歉; 我不记得严格的别名规则,现在不想查找它们。
要知道符号表示实际上非常类似。 看看结果
(favoriteType)-1 & (favoriteType)3
一旦你理解了C允许的三种不同的符号表示是如何工作的(参见例如Acme的答案),你就可以很容易地计算出这种表达式的值。
使用硬件和/或操作系统和/或编译器文档可以最好地回答建筑问题,例如表示(字大小,两个 – 与一个补充与符号大小)和字节序。
您可以使用类型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%8sn", "address", "value"); printf("%10s%8sn", "-------", "-----"); for (i = 0; i < sizeof value; i++) printf("%10p%8xn", p+i, (unsigned int) p[i]);
对于big-little-endian,你可以做类似的事情
unsigned int value = 0x01; unsigned char *p = (unsigned char *) &value; if (p[0] == 1) printf("Little-endiann"); else if (p[sizeof value - 1] == 1) printf("Big-endiann"); else printf("Weirdn");
但是,RTM更好。
以上就是c/c++开发分享关于号码表示相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/519312.html