• C语言 有符号、无符号


    C语言 有符号、无符号

    有符号无符号说明

    一、有符号 signed

    • char 8bit 取值范围:-2^7 ~ 2^7-1 、 -128~127

    • int 32bit 取值范围:-2^31 ~ 2^31-1 、 -2147483648~2147483647

    • long long 64bit 取值范围:-2^63 ~ 2^63-1

    #include <stdio.h>
    
    int main()
    {
        signed int a = -1089474374; //定义有符号整型变量a
        printf("%X
    ", a); //结果为 BF0FF0BA
    
        //B    F    0    F    F    0     B   A
        //1011 1111 0000 1111 1111 0000 1011 1010
    
        return 0;
    }

    注:数据存储时将-0对应的区间值设置为最小值 -2^7

    二、无符号 unsigned

    1、说明

    数据存储在计算机中不存在符号位

    无符号数最高位不是符号位,而就是数的一部分,无符号数不可能是负数。

    #include <stdio.h>
    
    int main()
    {
        unsigned int a = 3236958022; //定义无符号整型变量a
        printf("%X
    ", a); //结果为 C0F00F46
    
        return 0;
    }

     2、详解

    当我们写程序要处理一个不可能出现负值的时候,一般用无符号数,这样可以增大数的表达最大值。

    • char 8bit 取值范围:0~2^8-1、0~255

    • int 32bit 取值范围:0~2^32-1、0~4294967295

    3、表范围

    数据类型

    占用空间

    取值范围

    short

    2字节

    -32768 到 32767 (-215 ~ 215-1)

    int

    4字节

    -2147483648 到 2147483647 (-231 ~ 231-1)

    long

    4字节

    -2147483648 到 2147483647 (-231 ~ 231-1)

    unsigned short

    2字节

    0 到 65535 (0 ~ 216-1)

    unsigned int

    4字节

    0 到 4294967295 (0 ~ 232-1)

    unsigned long

    4字节

    0 到 4294967295 (0 ~ 232-1)

    数据溺出说明

    当超过一个数据类型能够存放最大的范围时,数值会溢出。

    有符号位最高位溢出的区别:符号位溢出会导致数的正负发生改变,但最高位的溢出会导致最高位丢失。

    #include <stdio.h>
     
    int main()
    {
           char ch;
     
           //符号位溢出会导致数的正负发生改变
           ch = 0x7f + 2; //127+2
           printf("%d
    ", ch);
           //     0111 1111
           //+2后 1000 0001,这是负数补码,其原码为 1111 1111,结果为-127
     
           //最高位的溢出会导致最高位丢失
           unsigned char ch2;
           ch2 = 0xff+1; //255+1
           printf("%u
    ", ch2);
           //       1111 1111
           //+1后 10000 0000, char只有8位最高位的溢出,结果为0000 0000,十进制为0
     
           ch2 = 0xff + 2; //255+1
           printf("%u
    ", ch2);
           //       1111 1111
           //+1后 10000 0001, char只有8位最高位的溢出,结果为0000 0001,十进制为1
     
           return 0;
    }
  • 相关阅读:
    什么是 HTTPS
    首页飘雪的效果
    load data导入数据之csv的用法
    phpcms v9 配置sphinx全文索引教程
    js的一些技巧总结
    MySQL 清除表空间碎片
    使用的前台开发在线工具
    (phpQuery)对网站产品信息采集代码的优化
    永远不要打探别人工资
    git 显示多个url地址推送
  • 原文地址:https://www.cnblogs.com/xiangsikai/p/12371505.html
Copyright © 2020-2023  润新知