zoukankan      html  css  js  c++  java
  • unsigned 和 signed

    http://www.cnblogs.com/stonehat/archive/2011/10/14/2212141.html

    http://m.blog.csdn.net/blog/u010086298/37777607

    先看两个例子

    #include <stdio.h>
    int main(int argc, char *argv[])
    {
        unsigned char a = -1;
        char b = a;
        printf("%d  %d",a,b);
    
        return 0;
    }
    //结果:255  -1
    #include <stdio.h>
    int main(int argc, char *argv[])
    {
        unsigned short a = -1;
        short b = a;
        printf("%d  %d",a,b);
    
        return 0;
    }
    //结果:65535  -1

     在计算机中,负数是以补码来存储的。 

          C语言中常量整数 -1的补码表示为0xFFFFFFFF。截取后面16位FFFF赋值给 变量a(unsigned short)。此时 a = 0xFFFF(a没有符号位,0xFFFF转换为十进制为65535)。

          a又将0xFFFF,直接赋值给short b。 此时 b = 0xFFFF(但是要注意,b是有符号的,0xFFFF转换为十进制为-1)。

    执行printf("%d %d",a,b);的时候,要将 a和b的值先转换为int型:

     a没有符号所以转为int型为0x0000FFFF,

     b有符号转换为int型为0xFFFFFFFF。

    十进制输出值 65535  -1. 

    #include <stdio.h>
    int main(int argc, char *argv[])
    {
        
        unsigned int a = -1;
        int b = a;
        printf("%d  %d",a,b);
    
        return 0;
    }
    //结果 -1 -1

    a在内存中值为0xFFFFFFFF,b的值为0xFFFFFFFF,都已经32位,

    a转换为int型的时候就是0xFFFFFFFF,所以输出-1.

    规则整理

    (1)如果转换前后位数相同,那么其实位本身并没有发生变化,变化的只是对位的解释(符号位)如unsigned int a = -1 int b=a 

    (2)如果位数变长了, 需要填充,分两种情况。a) unsigned 转换为signed,则填充0, b)signed 转换为unsigned,填充位与符号位相同

    (3)如果位数变短了,则直接截断

    规则(1)不多说

    规则(2)a)由下面的例子验证

    //定义了一个有符号的变量
    unsigned char  name = 255;
    int Pava = name;
    //定义了一个短整型,
    short Kava = name;
    printf("%d
    %d
    ",Pava,Kava);
    // 输出 255 255

    (2)b)

    char  name = 255;
    unsigned int Pava = name;
    printf("%d
    ",Pava);
    //输出 -1

    (3)

    int  name = 255;
    unsigned char Pava = name;
    printf("%d
    ",Pava);
    // 输出 255
  • 相关阅读:
    JS中offsetTop、clientTop、scrollTop、offsetTop各属性介绍
    在MOSS中使用无刷新的日历日程控件
    VCalendar不错的开源日历项目
    非常适用的Exchange 2007 Web Services
    在C#中实现DateDiff功能
    Div被Select挡住的解决办法
    安装Project Server2007出现错误
    vs2005中调试js(转)
    CrystalReports在MOSS下的新问题:来自磁盘上的图片不能显示
    关于多级审批工作流的问题描述
  • 原文地址:https://www.cnblogs.com/yxzfscg/p/4783199.html
Copyright © 2011-2022 走看看