• C语言数据类型与表达式(进阶篇十六)


        。。。

      无符号整数的范围

        unsigned short的取值范围为0~65535。

        unsigned short占有2个字节,也就是16位,在计算机内部用(0000 0000 0000 0000)2表示0,用(1111 1111 1111 1111)2表示最大数。

        (1)2表示1,(11)2表示3,(111)2表示7……(1111 1111 1111 1111)2表示65535,刚好是21-1、22-1、23-1……216-1,得出无符号整型的计算公式为0~2n-1(n为整型位数)。

      补码

        补码中第一位表示正负数:0表示正数,1表示负数。  

        补码原理

     

        要求一个负数的补码,将它的绝对值二进制按位取反再加1,正数的补码是自己

        如求4位二进制数-3的补码:把(3)10=(0011)2按位取反得(1100)2,再加1得(1101)2,short型只是把4位扩展为16位(0000 0000 0000 0011)2,按位取反得(1111 1111 1111 1100)2,加1得(1111 1111 1111 1101)2

        16位二进制数-32768的补码:将32768转成二进制得(1000 0000 0000 0000)2,取反得(0111 1111 1111 1111)2,加1得 (1000 0000 0000 0000)2

        补码的特点是可以把减法运算转换成加法,比如一个4位二进制减法(0011)2-(0001)2在CPU中会先取得(0001)2的补码(1111)2,将此变成加法运算 (0011)2+(1111)2得到(10010)2,因为运算器只有4个位,前面的1舍去,得到正确结果(0010)2,这样CPU中就可以省去一个做减法运算的元件。

      

      不同类型的混合运算

        ※赋值语句中,等号两边类型不同时,以左边类型为准。

        如:

          int a=300;

          char b;

          b=a; /*不可预期的错误,但系统不会报错*/

        ※除法运算时,2/3的结果为0,2.0/3或者2/3.0结果都为0.66666……。这说明如果除号两边都是整数,结果只能是整数,除号两边有任意一个浮点数,结果就是精确的浮点数。

          混合运算时也遵循上述规律:

            double d=1.0+2/3;

          会先算2/3,这时答案已经是0,再加1.0,得到错误的结果1.0,改成

            double d=1.0+2/3.0;

          结果为1.666666,正确。

        ※char参与任何运算都会转换成ASCII码

        ※%(取余)不能用在浮点数上,它不会自动将浮点数转换成整数。

      强制转换

        格式:

          (类型名)表达式

        如:

          double d=(double)2/3+1.0;

          相当于double d=2.0/3+1.0;

          与double d=2/3.0+1.0;运算结果相同

  • 相关阅读:
    面试题4:替换空格之发散思维
    一个简单的欢迎webpart
    MOSS2010 选项卡
    在Ribbon中添加自定义按钮
    老中医
    [SharePoint 2010 的那些事儿 – Secure Store Service]SharePoint 2010中的单点登录
    使用SharePoint Designer2010 向SharePoint2010的Ribbon中添加自定义操作
    耐心看完,越到后面越精彩
    高端人才必看,生意人必读
    moss 2010 开发人员面板的使用
  • 原文地址:https://www.cnblogs.com/httpcc/p/15420132.html
Copyright © 2020-2023  润新知