c/c++语言开发共享关于号码表示

如何找到我所在系统的数字表示?

    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

      (0)
      上一篇 2020年12月5日
      下一篇 2020年12月5日

      精彩推荐