zoukankan      html  css  js  c++  java
  • char能表示(-128~127)

           char 的取值范围是 -128 ~127

    :数0的补码表示是唯一的:
    +0的补码=+0的反码=+0的原码=00000000
    -0的补码=11111111+1=00000000(mod 2的8次方)

           由于-128的原码用8位无法表示,所以必须扩展到16位去表示,然后对16位的原码计算出16位的反码和补码,最后对16位的补码作低8位的截断,截断的低8位的值就是-128的补码了。

    // 8位所能表示的  原码 的范围-127到+127
    // 8位所能表示的  反码 的范围-127到+127
    // 8位所能表示的  补码 的范围-128到+127
    
    // 计算机当中,是规定-128的补码是1000 0000
    // 算的时候则需要扩展到16位来算。否则,第8位到底表示符号还是表示数值2的7次方呢?所以,8位就按8位的通常看法来看, -128  的补码是  1000 0000
    // 是难以理解的。只能扩展后来看。 
    
    // -128  原码 1000 0000 1000 0000
    // -128  反码 1111 1111 0111 1111
    // -128  补码 1111 1111 1000 0000
    
    // -129  原码 1000 0000 1000 0001
    // -129  反码 1111 1111 0111 1110
    // -129  补码 1111 1111 0111 1111
    
    int main(int argc, char* argv[])
    {
        char ch = -129; // warning C4309: 'initializing' : truncation of constant value
        char ch2 = -128; // no warning
        return 0;
    }
    

    注意:由于char能表示的范围是:-128~127,如果将-129赋给char,编译的时候是会产生warning的,并会截断,截断后的值是0x7f(127)。

  • 相关阅读:
    使用非root用户在RedHat 4下安装XHProf
    使用ClippingNode对精灵进行遮罩处理
    令Code::Blocks支持C++11特性
    解决cocos2dx在VS2012中文版环境下不支持中文的问题
    bzoj 1045[HAOI2008] 糖果传递
    bzoj 1070[SCOI2007]修车
    bzoj [ZJOI2010]网络扩容
    bzoj 1089[SCOI2003]严格n元树
    bzoj 4566[Haoi2016]找相同字符
    bzoj 1085[SCOI2005]骑士精神
  • 原文地址:https://www.cnblogs.com/wangfengju/p/6172483.html
Copyright © 2011-2022 走看看