整形数据 C

有符号

int long

#include 

int main()
{
    int a = 10;   //4个字节储存
    int b = -10;    //4个字节储存
    long d = 20;    //32位操作系统四个字节储存,64位操作系统八个字节储存
//  为了统一八个字节使用long long定义
    long long c = 20;   //八个字节
//   之所以使用不同定义,因为储存的不同。支持的最大数不同。为了更大的数故用不同的类型。
    printf("a=%d,b=%d,c=%d,d=%d\n",a,b,c,d);

    return 0;
}

进制

#include 

int main()
{

    int d = 0b100;  //0b 二进制
    int e = 0xB;    //0x 十六进制
    int f = 010;    //0 开头八进制

    printf("d=%d,e=%d,f=%d",d,e,f);

    return 0;
}

无符号

unsigned int = 10;
insigned int = 20;

有符号和无符号的区别

http://www.cnblogs.com/lazycoding/archive/2011/03/21/unsigned-signed.html
当我们指定一个数量是有符号类型时,此时,最高数称为“符号位”。为1时,表示该数为负值,为0时表示为正值。
就作用来说是存储的位数,以及最大数的不同。
可以这样说就是存储的多少问题。

应用举例

存储年龄和库存两个变量
其中年龄使用无符号,库存有符号。
这样存储的位数不同。所占据的空间也不相同,程序的大小也不相同。

位数

8位数字能储存的最大(有符号)的情况下-128~127
最高位为1时为负数,为0时为正数
为负数的时候除最高位即符号位外0变1,1变0 这为反码
然后在加1为补码
所以在进行储存的时候
11111111 为-1
而1000000 为-128
而10000001 为-127
这些和原码,反码补码有关
反码符号位不变(最高位不变),0变1,1变0
补码在反码的基础上加1
128转换为二进制为10000000
然后反码
11111111
在变成补码(一个字节)(有符号存储的时候)
10000000
这个时候就为-128
而没有符号储存的时候
8个位数全为
11111111
这个为11111111
而有符号位进行 表示的时候
11111111的第一位为符号位
先从补码转换成反码
减1,为11111110
在将1变0,0变1为原码
10000001
这个为-1
所以
综上

二进制值(1字节)

十进制值

10000000→
-128

10000001→
-127

10000010→
-126

10000011→
-125

11111110→
-2

11111111→
-1
最大的区别还是在于是否有符号位即是否加unsigned

演示一下哈

#include 

int main()
{

    __int8_t a = 127;

    printf("%d\n",a);
    return 0;
} 

输出结果为127


#include 

int main()
{

    __int8_t a = 128;

    printf("%d\n",a);
    return 0;
}

输出结果为-128
原因就是上面。
界限

无符号数:                        0 ----------------- 255 

有符号数:         -128 --------- 0 ---------- 127 
#include 

int main()
{

    __int8_t a = 128;
    __uint8_t b = 128;

    printf("%d,%d\n",a,b);
    return 0;
}
输出结果为 -128 128
#include 

int main()
{

    __int8_t a = 128;
    __uint8_t b = 255;

    printf("%d,%d\n",a,b);
    return 0;
}
结果分别为-128  255
#include 

int main()
{

    __int8_t a = 128;
    __uint8_t b = 256;

    printf("%d,%d\n",a,b);
    return 0;
}
输出结果为-128 0
#include 

int main()
{

    __int8_t a = 128;
    __uint8_t b = 257;

    printf("%d,%d\n",a,b);
    return 0;
}
输出结果-128  1
#include 

int main()
{

    __int8_t a = 129;
    __uint8_t b = 257;

    printf("%d,%d\n",a,b);
    return 0;
}
输出结果为-127 1

以上结果为一个字符的时候进行输出。
有溢出

__int64_t c = 34;
在每一个平台上为64位,为longlong类型,这样就基本上就不会出现问题了

http://kooyee.iteye.com/blog/349491
http://www.360doc.com/content/12/0131/10/6973384_183067995.shtml
*******__未完待续*******
更多;https://www.iming.info/2018/02/08/328.html

你可能感兴趣的:(整形数据 C)