zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    HDU 3085 Nightmare Ⅱ[双向广搜]
    HDU 4028 The time of a day [离散化DP]
    HDU4027 Can you answer these queries? [线段树]
    HDU 4331 Image Recognition [边上全为1构成的正方形个数]
    HDU4026 Unlock the Cell Phone [状态压缩DP]
    HDU 4333 Revolving Digits [扩展KMP]
    HDU4335 What is N? [数论(欧拉函数)]
    工程与管理
    项目管理笔记一
    通过100个单词掌握英语语法(七)ask
  • 原文地址:https://www.cnblogs.com/xiangsikai/p/12371505.html
Copyright © 2011-2022 走看看