精华内容
下载资源
问答
  • C语言int型数据范围

    2017-09-09 19:52:00
    在32位及以上操作系统上,int型数据的十进制表示范围是:-231到 231-1。原因:因为int是带符号类型,所以最高位为符号位,于是最大表示正数原码(正数原码和补码相同):01111111 11111111 11111111 11111111...

    在32位及以上操作系统上,int型数据的十进制表示范围是:-231 到   231-1。
    原因:因为int是带符号类型,所以最高位为符号位,于是最大表示的正数的原码(正数的原码和补码相同):01111111 11111111 11111111 11111111,也就是2的31次方减1。
    再来看最小值,-2的31次方的原码表示为10000000 00000000 00000000 00000000,此时最高位的数字既代表符号(1代表是负数,0代表是正数),也代表数值。求它的补码(除符号位外按位取反,最后一位+1),所得结果为10000000 00000000 00000000 00000000。同样也是最高位既代表符号又代表数值,也就是说-2的31次方的原码和补码是相同的。
    接着试试-2的31次方减1,它的原码为(假设先不考虑溢出)11111111 11111111 11111111 11111111,求反加1之后为10000000 00000000 00000000 00000001,变成了-1。所以,int的表示范围是: -231 ~   231-1

     

    补充运算符(转)

    int i = 1;
    i = i << 2;

    这是把i左移两位,左移的规则只记住一点:丢弃符号位,0补最低位!
    如果移动的位数超过了该类型的最大位数,那么编译器会对移动的位数取模。如对int型移动33位,实际上只移动了33%32=1位。
    右移有两种,算术右移(带符号)>>和逻辑右移(不带符号)>>>。
    算术右移符号位不变,左边补上符号位。如: 1000 1000 >> 3 为 1111 0001
    逻辑右移符号位一起移动,左边补上0。如:1000 1000 >>> 3 为 0001 0001
    最后,移位的位数不能超过数据的大小,不能小于0。

    转自http://blog.csdn.net/jiangyi711/article/details/5217431

    转载于:https://www.cnblogs.com/orion7/p/7499134.html

    展开全文
  • 比如我们定义了一个int类型的数据,它的正向最大取值为2147483647,换算成天数:2147483647/1000/3600/24,大约是24.85天,如果你定义了一个每隔1ms加一的变量,那么这个值最多只能用24天,超过24天之后这个计数值就...

    一、CPU位数和数据类型

    在嵌入式开发中,不同数据类型的位数和取值范围由CPU的位数决定,我们可以通过sizeof关键词计算出每一种数据类型的范围。

    嵌入式开发中熟练掌握各数据类型的取值范围是很有必要的,尤其在长期运行的设备中。比如我们定义了一个int类型的数据,它的正向最大取值为2147483647,换算成天数:2147483647/1000/3600/24,大约是24.85天,如果你定义了一个每隔1ms加一的变量,那么这个值最多只能用24天,超过24天之后这个计数值就会出现基数问题,从而导bug的产生。

    二、整数类型的取值范围

    不同数据类型在32位CPU和64位CPU上的字节数和取值范围如下:

    数据类型 32位CPU 64位CPU 32位CPU下取值范围
    char 1 1 -128~127 (-27~27-1)
    unsigned char 1 1 0~255 (0~28-1)
    short int 2 2 -32767~32768 (-215~215-1)
    unsigned short int 2 2 0~65535 (0~216-1)
    int 4 4 -2147483648~2147483647 (-231~231-1)
    unsigned int 4 4 0~4294967295 (0~232-1)
    long 4 8 -2147483648~2147483647 (-231~231-1)
    long long 8 8 (-263~263-1)

    三、64位ubuntu下计算出的各数据类型占用的字节数

    int main()
    {
        printf("int:%d\r\nunsigned int:%d\r\nshort int:%d\r\nlong:%d\r\nlong long:%d\r\nchar:%d\r\nunsigned char:%d\r\nfloat:%d\r\ndouble:%d\r\nbool:%d\r\nint*:%d\r\n",
    	       sizeof(int),sizeof(unsigned int),sizeof(short int),sizeof(long),sizeof(long long),sizeof(char),sizeof(unsigned char),sizeof(float),sizeof(double),sizeof(bool),sizeof(int*));   
    }
    

    在这里插入图片描述

    展开全文
  • C语言的数据类型有void、char、short、int、float、double。由于void是空类型,因此以下主要介绍char、short、int、float、double的取值范围。 char: 1、signed char 1个字节,取值范围:-128~127。,最大值为...

    前言:

    C语言中的数据类型有void、char、short、int、float、double。由于void是空类型,因此以下主要介绍char、short、int、float、double的取值范围。


    char:

    1、signed char
    1个字节,取值范围:-128~127。,最大值为127容易理解,0111 0111,最高位为符号位;最小值为什么不是-127而是-128呢,1111 1111不是-127吗?
    -1从原码到补码的转换过程:1000 0001 -> 1111 1110 -> 1111 1111
    -2从原码到补码的转换过程:1000 0010 -> 1111 1101 -> 1111 1110
    -3从原码到补码的转换过程:1000 0011 -> 1111 1100 -> 1111 1101

    从以上补码不难找出规律,-(n+1)的补码是在-n补码的基础上-1得到。
    -127从原码到补码的转换过程:1111 1111 -> 1000 0000 -> 1000 0001
    推出-128的补码为1000 0000,恰好补码1000 0000也空闲着,顺理成章地规定1000 0000为-128的补码,而机器中数据是以补码的方式存储的,因此,signed char类型的取值范围为-128~127。
    1.1下面举几个溢出的例子:

    1 1000 0001 //-129的原码
    

    溢出位舍弃,-129的补码为0111 1111,符号位为0,正数的补码等于原码,认为是127的原码。因此-129溢出后的值为127。

    0 1000 0001 //129的原码
    

    正数的原码即补码,因此舍弃溢出位后存入机器的补码为1000 0001,转换成原码就是1111 1111,即-127。

    1000 0000 //128的原码
    

    补码1000 0000,所以存进机器的是1000 0000,1000 0000,即-128。

    1 1001 0000 //400的原码
    

    正数的原码即补码,因此舍弃溢出位后存入机器的补码为1001 0000,转换为原码为1111 0000,即-112。

    1 1100 1000 //-200的原码
    

    舍弃溢出位后存入机器的补码为0011 1000,符号位为0,正数的补码等于原码,认为是56的原码。因此-200溢出后的值为56。
    1.2、溢出计算总结
    步骤一:先根据值来得到补码。
    步骤二:由步骤一得到的补码舍弃溢出位后得到存入机器的补码。
    步骤三:根据存入机器的补码反推得到原码。
    2、unsigned char
    1个字节,取值范围:0~255。


    short:

    1、signed short
    2个字节,取值范围:-32768~32767。
    2、unsigned short
    2个字节,取值范围:0~65535。


    int:

    1、signed int
    4个字节,取值范围:-2147483648~2147483647。
    1、unsigned int
    4个字节,取值范围:0~4294967295。


    float:

    4个字节,取值范围:-3.4*10^38~3.4*10^38。
    

    double:

    8个字节,取值范围:-2^1024~2^1024。
    

    展开全文
  • C语言中常用的数据类型有char(字符型),short(短整型数据类型),int(整形数据类型),long(长整形数据类型),double(双精度浮点型),float(浮点型)。  char在内存中是以一个字节8位储存,在内存中只有0或1,它...

        C语言中常用的数据类型有char(字符型),short(短整型数据类型),int(整形数据类型),long(长整形数据类型),double(双精度浮点型),float(浮点型)。

       char在内存中是以一个字节8位储存,在内存中只有0或1,它代表有符号短整数型数据类型,简称短整数型数据类型,-128——127最高位代表符号位,0代表正数,1代表负数,正数最大为01111111B(用二进制表示)= 1*2^6(这个1为第六位的1,2^6代表2的6次方)+1*2^5(这个1为第五位的1)+1*2^4+1*2^3+1*2^2+1*2^1+1*2^0 = 127D(127为十进制数用D表示,一般可省),而最小值为10000000B = -0D,而在内存中用补码来表示负数,正数的原码,反码,补码相等,但负数的原码,除符号位为,其余位取反得到反码,反码在+1,得到补码,如10000000B的反码为11111111B,补码为11111111B+1=100000000B = -128;对于没有符号短整数型数据类型 unsigned char在内存中也是以一个字节(8位)来存储,它的存储范围为0——255,因为它没有符号,故最小值为00000000B = 0D,而最大值11111111B = 2^7 -1 = 255D,故它的取值范围为0-255;char在输出的时候以%c形式输出,而unsigned char以%u输出;short在内存占2个字节16位,它的取值范围为-2^15——2^15-1,计算方法和char计算方法一样,而unisgned short取值范围为0-2^16-1;short在输出时用%d表示,unsigned short输出格式为%u,int/long 在内存中占4个字节32位,它的取值范围为-2^31——2^31-1;而unsigned int/unsigned long 取值范围为0——2^31-1,但long的输出格式是%l,unsigned long是%lu;double是双浮点型,8个字节,float是4个字节,double一般的有效数字是15-16位,而float是6-7位,因此double的精度比float高

    展开全文
  • unsigned int 0~4294967295  int -2147483648~2147483647  unsigned long 0~4294967295 long -2147483648~...long long的最大值:9223372036854775807 long long最小值:-9223372036854775808 unsig
  • C学习:一文说清C语言常用数据类型范围及宏引用常见类型数值范围数据类型范围宏定义 常见类型数值范围 char/signed char/int/long long 整数范围整理如下表: 类型 所占字节 最小值 最大值 char 1 0 127 ...
  • 今天在做POJ题是遇到了大数问题,就想编程支持long的最大范围。 long max = 1; printf("sizeof(long ) = %d \n",sizeof(long)); //long类型数据字节数bytes printf("sizeof(int ) = %d \n",sizeof(int))...
  • -----------首先附上各个数据类型大小:类型前还可以加上long , short 等修饰符先不讨论用char来举例子:一篇大神对char范围分析博客整数溢出计算一个整数时候超过整数能够容纳的最大单位后,整数会溢出,溢出...
  • C语言数据类型表示范围

    千次阅读 2014-10-22 20:40:37
    问题:sizeof(int) = 2,int表示范围为什么是-2^15~2^15-1? 答:对于有符号数,最高位为符号位。二进制原码最大值为0111111111111111=2^15-1,最小值为 1111111111111111=-(2^15-1),而0分为+0和-0,即...
  • #include <stdio.h> #include <... // int类型数据范围 // 方法1 printf("int最小值=%d, int最大值=%d\n", INT_MIN, INT_MAX); // 使用limits.h里宏 //方法2 signed int max = (1 &
  • 溢出和取值范围 C语言的整型溢出问题 整数溢出 ...double与int类型存储机制不同,long int8个字节全部都是数据位,而double是以尾数,底数,指数形式表示,类似科学计数法,因此double比
  • 需要考虑是什么数据类型 (1)正负数 (2)数值的范围最大多少?最小多少? (3)数值精度(整形,字符,实型) (4)数据的种类(一种;多种(结构体,共用体)) ...
  • C语言数据类型

    2020-06-26 21:44:57
    C语言数据类型 按计算机存储方式可分为两大基本类型:整数类型和浮点数类型,不同种类提供了不同的范围和精度。 关键字 创建基本数据类型要用到8个关键字:int、long、short、unsigned、char、float、double、...
  • 有符号,即值范围为正负对称,其中最小负数绝对值比最大正数大1,数据类型默认使用signed long 扩大存储数据的内存,一般是原数据储存大小2倍 short 用于区别long,一般是保持原数据储存大小,数据类型默
  • 以int的举例,它是1个字节,1个字节等于8个比特位,故它最小的范围是00000000,我们生活中所用的数字是10进制的,也就是0,1,2,3,4,5,6,7,8,9,00000000化成10进制就是0,char最大的比特位是,11111111,...
  • C语言程序设计时可能会因为变量之间运算而导致溢出,使得最终结果我不我们要数值,这里列出C语言中几种常用类的最大值最小值(10进制)以供参考:整型[signed]int -2147483648~+2147483648 无符号整型unsigned...
  • c语言实现基本数据结构(哈希表) 写这个哈希表总是段错误,找了半天bug。。。原来是各种小错误不断,写得很蛋疼。 我是是用数组实现,数组的最大值定义成宏。一共只有四个函数,分别为初始化哈希表,构造...
  • 设计需求: 1.对数据给出区间宽度进行统计 2.生成生成指定区间宽度...从数据中求出最大值和最小值,对最大值向上取整,对最小值向下取整,即可得出区间范围。从命令行参数中获得区间值,用区间范围除以区间值可以得到需
  • 一、单字节能表示的范围 (一)无符号单字节 一个字节有8位,取值范围为0000000011111111,化为十进制即为...能表示正数的最大值为01111111,即十进制127。能表示负数最小值不是11111111,而是10000000。10...
  • char所占空间为1个字节,即8个bit位,当定义为有符号char时(系统默认为有符号数),其取值范围为-128~127,因为最大值为正数,必须保证符号位为0,0111 1111 表示为+127;负数时最高位符号位为1, 1000 0000 代表-...
  • 一、EDID: Extended Display Identification Data(扩展显示标识数据)是一种VESA 标准数据格式,其中包含有关监视器及其性能参数,包括供应商信息、最大图像大小、颜色设置、厂商预设置、频率范围的限制以及显示器...
  • 对于S的所有非空连续子序列T,求最大的序列和。 变量条件:N为正整数,N≤1000000,结果序列和在范围(-2^63,2^63-1)以内。 输入描述: 第一行为一个正整数N,第二行为N个整数,表示序列中的数。 输出描述: ...
  • C语言 · 最大乘积

    2017-02-24 21:44:00
    算法提高 最大乘积 ... 第一行一个数表示数据组数 每组输入数据共2行: 第1行给出总共数字个数n和要取个数m,1<=n<=m<=15, 第2行依次给出这n个数,其中每个数字的范围满足:a[...
  • C语言数据类型隐式转换规则

    千次阅读 2018-07-05 10:26:43
    C语言里有各种数据类型,包含char, uchar, short, ushort, int, uint, long, ulong, float, double。每种数值类型能表达的值的范围是不同的,而C/C++...类型对齐时以size最大的类型为基准进行提升。对任何一个混合运...

空空如也

空空如也

1 2 3 4 5 ... 15
收藏数 281
精华内容 112
关键字:

c语言最大的数据范围

c语言 订阅