精华内容
下载资源
问答
  • 在学C语言的时候应该都会先了解各种基本数据类型的初值和它们的取值范围,有些人可能会不太重视这块内容,其实很重要,很多大公司面试的过程中都会问到int取值范围,溢出之后会怎么样等问题。 在写程序的时候有...

    int类型变量的取值范围?


    前言

    在学C语言的时候应该都会先了解各种基本数据类型的初值和它们的取值范围,有些人可能会不太重视这块内容,其实很重要,很多大公司面试的过程中都会问到int的取值范围,溢出之后会怎么样等问题。
    在写程序的时候有时候我们将一个很大的int型的数相加一个数,就会发现结果不对。这是为什么呢?
    因为这个数超过了int型的取值范围。
    C语言中int的取值范围为:-2147483648 ~2147483647
    解释如下:int类型在C语言中占4个字节,即32个二进制位。当表示正数时,最高位为符号位(符号位为0),最大的正数是 0111 1111 1111 1111 1111 1111 1111 1111 即2^31 -1 = 2147483647当表示负数时,最高位为符号位(符号位为1),最小的负数是 1000 0000 0000 0000 0000 0000 0000 0000 而在计算机中是以补码的形式存储的,C语言规定 1000 0000 0000 0000 0000 0000 0000 0000 的补码为-2147483648所以C语言中int的取值范围为:-2147483648 ~ 2147483647

    我们也可以用程序来查看int型的最大最小值。

    #include<stdio.h>
    #include<limits.h>
    int main(){
    int min = INT_MIN;
    int max = INT_MAX;
    printf("%d %d\n",max,min);
    }
    
    展开全文
  • 在学C语言的时候应该都会先了解各种基本数据类型的初值和它们的取值范围,有些人可能会不太重视这块内容,其实很重要,很多大公司面试的过程中都会问到int取值范围,溢出之后会怎么样等问题。 在写程序的时候有...

    int类型变量的取值范围?

    前言
    在学C语言的时候应该都会先了解各种基本数据类型的初值和它们的取值范围,有些人可能会不太重视这块内容,其实很重要,很多大公司面试的过程中都会问到int的取值范围,溢出之后会怎么样等问题。
    在写程序的时候有时候我们将一个很大的int型的数相加一个数,就会发现结果不对。这是为什么呢?
    因为这个数超过了int型的取值范围。
    C语言中int的取值范围为:-2147483648 ~2147483647
    解释如下:int类型在C语言中占4个字节,即32个二进制位。当表示正数时,最高位为符号位(符号位为0),最大的正数是 0111 1111 1111 1111 1111 1111 1111 1111 即2^31 -1 = 2147483647当表示负数时,最高位为符号位(符号位为1),最小的负数是 1000 0000 0000 0000 0000 0000 0000 0000 而在计算机中是以补码的形式存储的,C语言规定 1000 0000 0000 0000 0000 0000 0000 0000 的补码为-2147483648所以C语言中int的取值范围为:-2147483648 ~ 2147483647

    我们也可以用程序来查看int型的最大最小值。

    #include<stdio.h>
    #include<limits.h>
    int main(){
    int min = INT_MIN;
    int max = INT_MAX;
    printf("%d %d\n",max,min);
    }
    
    展开全文
  • 本文中的int类型的相关数据都以32位操作系统下的DVC++编译器环境为准。在下表中可以看到,int类型表示带有符号的整型,而unsigned int类型为无符号的整型。 类型名称 占字节数 取值范围 ...

    本文中的int类型的相关数据都以32位操作系统下的DVC++编译器环境为准。在下表中可以看到,int类型表示带有符号的整型,而unsigned int类型为无符号的整型。

    类型名称

    占字节数

    取值范围

    int

    4B

    -2^31~2^31-1

    unsigned int

    4B

    0 ~ 2^32

     

    1、占用的比特位数量

    32位操作系统下,两者都是占用4个字节,每个字节有8个比特位,因此有32个0-1的二进制位数。两者的不同在于,int类型有正负号(±)的存在,需要比unsigned int类型多消耗一个位数。

    2、符号的表示方法

          在所有被int类型占用的比特位中,左起第一个位就是符号位。int类型的符号位上,0表示正数,1表示负数。在32位操作系统下,其余后面31位是数值位。

    3、数字0的表示方法

          按照上面提到的符号,我们有了两种0的表示方法,即“+0”和“-0”。

          实际上,在32位系统下int类型中,我们计算机已经强行规定了这种情况,数字0采用“+0”的表示方法,即00000000 00000000 00000000;而“-0”这个特殊的数字被定义为了-2^31。

          因此我们看到32位系统下int类型的取值范围中,负数部分比正数部分多了一个数字,正数的最大取值是2^31-1,而负数的最小取值是-2^31。正数部分之所以要减去1,是因为被数字0占用了,而负数部分不需要用来表示0,因此原本的“-0”就用来表示-2^31这个数字。

     

    那么是不是实现了上面已经提到的int类型的深入理解,我们就可以知道内存中int类型的数据表达了呢?

    比如int类型的数字“-1”,按照上面的理解方式,在内存中32个比特位上应该是这样子的:10000000 00000000 00000001,左边第一个1表示负号,后面31位表示数值部分“1”。实际情况并不是这样。这里就需要引入“补码”这个概念了。

    Q2:什么是“补码”?

         要回到这个问题,得额外补充两个概念,“原码”和“反码”。

     

          计算机中的符号数有三种表示方法,即原码、反码和补码。三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”,而数值位,三种表示方法各不相同。

    1、原码(true form)

          原码,是计算机中一种对数字的二进制定点表示方法。原码表示法在数值前面前面有一位符号位(即最高位为符号位),正数该位为0,负数该位为1(0有两种表示:+0和-0),其余位表示数值的大小。

          怎么样,是不是觉得眼熟,没错!Q1中结尾提到的int类型数值“-1”的32位二进制就是原码,即10000000 00000000 00000001。与之对应的,正数“+1”就是00000000 00000000 00000001。

          那么为何不用原码在内存中表示数值呢?

    我们举个例子(以8位二进制表示)

    十进制

    原码

    1

    0000 0001

    -1

    1000 0001

    结果(原码)

    1000 0010

    结果(十进制)

    -2

    上述结果换算成十进制为-2,这显然出错了。这是由于计算机在计算时以加法进行计算的算法更简便,减法先转换为负数,再进行加法运算。因此,原码的符号位不能直接参与运算。

    总结:原码是有符号数的最简单的编码方式,便于输入输出,但作为代码加减运算时较为复杂,故计算机一般不采用这种编码方式存储符号数。

    2、反码

        首先我们来了解下反码表示法的规定:“正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。”

          什么意思呢?举个例子说明下:

    · 对于正数和“+0”而言,其原码本身就是反码,例如 8位二进制“+1”,其原码与反码都是00000001;

    · 对于负数和“-0”而言,符号位与原码中一样,保持不变,其余位数逐位取反,1换成0,0换成1,例如 “-1”,其8位二进制原码是1000 0001,其反码是1111 1110;

    那么我们是否已经可以正常进行运算了呢?

    我们举个三个例子:

    例一:1+2=3(以8位二进制表示)

    十进制

    原码

    反码

    1

    0000 0001

    0000 0001

    2

    0000 0010

    0000 0010

    结果(反码)

     

    0000 0011

    结果(原码)

     

    0000 0011

    结果(十进制)

     

    3

    计算结果正确。

    例二:1+(-2)=-1

    十进制

    原码

    反码

    1

    0000 0001

    0000 0001

    -2

    1000 0010

    1111 1101

    结果(反码)

     

    1111 1110

    结果(原码)

     

    1000 0001

    结果(十进制)

     

    -1

          计算结果正确。

    例三:1+(-1)=0

    十进制

    原码

    反码

    1

    0000 0001

    0000 0001

    -1

    1000 0001

    1111 1110

    结果(反码)

     

    1111 1111

    结果(原码)

     

    1000 0000

    结果(十进制)

     

    -0

          计算结果为-0,问题来了,由于-0的存在,使得二进制与十进制的互换不再是一一对应的关系。

          总结:由于-0这个问题的存在,会使得计算机需要增加额外的物理硬件配合运算,所以在计算机发展的早期就已经抛弃了使用反码储存数据。

    3、补码

          补码正是基于反码的“-0”问题诞生的,可以解决这个问题。

        补码的计算方法是:正数和+0的补码是其本身,负数则先计算其反码,然后反码加上1,得到补码。

          补码换算为原码的过程中,如果补码是正数或者+0的补码,则其原码就是补码本身;如果补码是负数或者-0的补码,则其原码的计算方法是,先将补码减掉1,得到反码,再将反码取反,得到原码。

          以上的说法有些绕,但是补码的算法应该已经说清楚了。下面举一些例子。

    例一:1+(-1)=0

    十进制

    原码

    反码

    补码

    1

    0000 0001

    0000 0001

    0000 0001

    -1

    1000 0001

    1111 1110

    1111 1111

    结果(补码)

     

     

    0000 0000

    结果(反码)

     

     

    0000 0000

    结果(原码)

     

     

    0000 0000

    结果(十进制)

     

     

    +0

    计算结果正确,+0即是数字0的唯一表示。

    例二:1+2=3

    十进制

    原码

    反码

    补码

    1

    0000 0001

    0000 0001

    0000 0001

    2

    0000 0010

    0000 0010

    0000 0010

    结果(补码)

     

     

    0000 0011

    结果(反码)

     

     

    0000 0011

    结果(原码)

     

     

    0000 0011

    结果(十进制)

     

     

    3

    计算结果正确。

    例三:1+(-2)=-1

    十进制

    原码

    反码

    补码

    1

    0000 0001

    0000 0001

    0000 0001

    -2

    1000 0010

    1111 1101

    1111 1110

    结果(补码)

     

     

    1111 1111

    结果(反码)

     

     

    1111 1110

    结果(原码)

     

     

    1000 0001

    结果(十进制)

     

     

    -1

    计算结果正确。

    特别地,我们加入例四:(-1)+(-127)=-128

    我们知道8位二进制的符号数的取值范围是(-2^7)~(2^7-1),即-128~127。

    十进制

    原码

    反码

    补码

    -1

    1000 0001

    1111 1110

    1111 1111

    -127

    1111 1111

    1000 0000

    1000 0001

    结果(补码)

     

     

    1000 0000

    结果(反码)

     

     

     

    结果(原码)

     

     

     

    结果(十进制)

     

     

    -128

    由于补码1000 0000具有特殊性,计算机在编写底层算法时,将其规定为该取值范围中的最小数-128,其值与(-1)+(-127)的计算结果正好符合。

    补充一点,8位二进制补码1000 0000没有对应的反码和原码,其他位数的二进制补码与此类似。

     

     

    通过以上两个问题Q1和Q2的回答和引申,我们已经知道int类型在内存中存储的方式,即int类型在内存中,以补码的形式存储。而且我们还知道了为何int类型的取值范围中负数的最小值的绝对值比正数的最大值大1的原因,即-2^32的补码是10000000 00000000 00000000,原本-0的位置被-2^32取代了。

     

     

     

     

    展开全文
  • int数据类型的取值范围是多少?怎么计算的? 百度了一下,有说最大是32767,有说最大是2147483647,这些都是如何计算的?为何得到不同的结果?和开发环境有关吗? 求解!
  • 我们知道,一般情况下,int数据类型占用4字节的内存空间,取值范围:-2147483648 ~ 2147483647 int数据类型的下限是-2147483648,上限是2147483647。 int m = 2147483647;GCC编译器编译正常;[b][color=#000000]...
  • int类型的数据长度为2个字节,则unsignedint类型数据的取值范围是().A.255B.65535C.-32768~+32767D.-256~+255满分:5 分2.C语言中,下列说法正确的是()A.不能使用do…while语句构成循环.B.do…while语句构成的循环...

    C语言习题

    一、单选题(共 15 道试题,共 75 分.)

    V

    1.设int类型的数据长度为2个字节,则unsignedint类型数据的取值范围是().

    A.255

    B.65535

    C.-32768~+32767

    D.-256~+255

    满分:5 分

    2.C语言中,下列说法正确的是()

    A.不能使用do…while语句构成循环.

    B.do…while语句构成的循环必须用break语句才能退出.

    C.do…while语句构成的循环,当while语句中的表达式值为非0结束循环.

    D.do…while语句构成的循环,当while语句中的表达式值为0结束循环.

    满分:5 分

    3.下面正确的字符常量是()

    A.\X17'

    B.\80'

    C.\\'

    D."""\n"""

    满分:5 分

    4.若使用下述程序段将整数12和浮点数13.6分别赋给变量a和b,那么输入应该式().inta;floatb;scanf(“a=%d,b=%f”,a,b);

    A.1213.6

    B."a=12,b=13.6"

    C."12,13.6"

    D.a=12b=13.6

    满分:5 分

    5.sizeof(float)是().

    A.双精度型表达式

    B.一个整型表达式

    C.一个函数调用

    D.一个不合法的表达式

    满分:5 分

    6.C语言中的构造类型数据包括()

    A.数组类型、构造体类型和共用体类型

    B.数组类型、结构体类型和指针类型

    C.数组类型、结构体类型和枚举类型

    D.数组类型、结构体类型和空类型

    满分:5 分

    7.若有定义:intx=7;floata=2.5,b=4.7;则表达式a+x%3*(int)(a+b)%2/4的值是().

    A.2.5

    B.2.75

    C.3.5

    D.0

    满分:5 分

    8.下列不属于C语言关键字的是().

    A.default

    B.register

    C.enum

    D.external

    满分:5 分

    9.在C语言中,一维数组的定义方式为:类型说明符数组名().

    A.[常量表达式]

    B.[整型表达式]

    C.[整型常量或整型表达式]

    D.[整型常量]

    满分:5 分

    10.若有说明:inta[3][4];则对a数组元素的正确引用是().

    A.a[2][4]

    B."a[1,3]"

    C.a[1+1][0]

    D.a(2)(1)

    满分:5 分

    11.下列程序的输出为()#includestdio.h;main(){intm=13;floata=12.6,x;x=m/2+a/2;printf(“%f\n”,x);}

    A.12

    B.12.3

    C.12.8

    D.12.3

    满分:5 分

    12.设I和x都是int类型,则对于for循环语句for(i=0,x=0;i

    作业帮用户2016-11-29举报

    展开全文
  • int类型取值范围

    万次阅读 2015-06-25 14:59:06
    要想判断int类型的取值范围,首先要知道: 1.int类型所占字节数; 2.整型变量数据在内存中以什么方式存储;获得int型所占字节数#include int main() { printf("%d\n",sizeof(int)); return 0; }结果: 得到int...
  • int的取值范围

    万次阅读 多人点赞 2019-08-05 21:19:38
    在学C++或者Java的时候应该都会先了解各种基本数据类型的初值和它们的取值范围,有些人可能会不太重视这块内容,其实很重要,很多大公司面试的过程中都会问到int取值范围,溢出之后会怎么样等问题。 正文 首先来...
  • 数据类型占用空间取值范围(有符号)取值范围(无符号)小整数型tinynt1字节-128~1270~255大整数型smallint2字节-32768~327670~65535大整数型MEDIUMINT3字节±83886080~16777215大整数型INT或INTEGER4字节±21474836480~...
  • (2021.01.11) 【数据类型】达到108次方运算要使用Long型。(P5703苹果采购)
  • 在本文中,我们以短整型为例,给大家介绍该类型的取值范围的计算方式,以及原理。 首先默认情况下,unsigned int 占用2个字节(跟具体的编译器和操作系统有关),也就是16位。 在计算机存储的数据中,都是用0和1...
  • unsigned int 0~4294967295  int -2147483648~2147483647  unsigned long 0~4294967295 long -2147483648~2147483647 long long最大值:9223372036854775807 long long最小值:-...
  • 一个byte由八个位组成,符号位 + 数值位,如x0000000,其中第1位是符号位,后面7位表示数值,第1位是符号位(0为正,1为负)。这样+1就是00000001,-1就是10000001。最大正数就是0 1111111,即20+ 21+……+26=...
  • 大家都知道占2个字节的int类型取值范围是-128~127;那么这个-128究竟是怎么来呢? 正文 以java语言中的int类型为例,int占用2个字节byte,共8个bit;也就是8个0或者1来表示正数;在计算机系统中规定第一位表示...
  • unsigned int 0~4294967295 int 2147483648~2147483647 unsigned long 0~4294967295 long 2147483648~2147483647 long long最大值:9223372036854775807 long long最小值:-...
  • 今天在无意中想到这个问题,因此记录一下。嘘嘘,莫笑。 数据在计算机里面以2进制存储。正整数就是以二进制存储。负整数以补码存储。一个Int类型数据占据空间4字节。...简单说Int类型占据4字节,所以是这个取值范围
  • 类型名称 取值范围 int -2^31~(2^31-1) unsigned int 0~(2^32-1) 2^31=2,147,483,648 10^9数量级 2^32=4,294,967,296 10^9数量级 类型名称 ...
  • INT数据类型的最小值:-2,147,483,648,转化成二进制1000 0000 0000 0000 0000 0000 0000 0000第一位1即时符号位,也是数值位,231=2,147,483,648INT数据类型的最大值2,147,483,647,转化为二进制 0111 1111 1111 ...
  • 在JAVA中一共有八种基本数据类型,他们分别是:byte、short、int、long、float、double、char、boolean整型其中byte、short、int、long都是表示整数,只不过他们的取值范围不一样byte的取值范围为-128~127,占用1...
  • MySQL中各数据类型的取值范围 TINYINT -128 - 127 TINYINT UNSIGNED 0 - 255 SMALLINT -32768 - 32767 SMALLINT UNSIGNED 0 - 65535 MEDIUMINT -8388608 - 8388607 MEDIUMINT UNSIGNED 0 - 16777215 INT 或 INTEGE.....
  • 在JAVA中一共有八种基本数据类型,他们分别是byte、short、int、long、float、double、char、boolean整型其中byte、short、int、long都是表示整数,只不过他们的取值范围不一样byte的取值范围为-128~127,占用1个...
  • 数据类型的取值范围

    2018-08-15 21:07:02
    数据类型的取值范围 数据类型 取值范围 char -128 ~ 127 (1 Byte,大约3位) short -32768 ~ 32767 (2 Bytes,大约五位) unsigned short 0 ~ 65536 (2 Bytes,大约五位) int -2147483648 ~ ...
  • 电工学习网:www.diangon.com技术驱动未来,关注电工学习网官方微信公众号“电工电气学习”,收获更多经验知识。...一、区别的概述(着急的话看完这段就可以了)1、WORD是无符号的数据类型INT是有...
  • 有一天突然想起,php intval的取值范围与mysql的int类型一样吗? 查了一下,不一样…… ...
  • 大家在做plc程序设计时有没有遇到过这种困惑:有的程序...INT是有符号的数据类型(最高位为1表示负数,0表示正数)。通常情况下WORD用于逻辑运算,INT用于数学运算;在使用梯形图或SCL等语言编程时区分较严格。在使用...
  • 1、基本类型:short 二进制位数:16包装类:java.lang.Short最小值:Short.MIN_VALUE=-32768 (-215此方)最大值:Short.MAX_VALUE=32767 (215次方-1)2、基本类型int 二进制位数:32包装类:java.lang.Integer...
  • unsigned int 0~4294967295 //整型的每一种都有无符号(unsigned)和有符号(signed)两种类型(float和double总是带...无符号版本号和有符号版本号的差别就是无符号类型能保存2倍于有符号类型的正整数数据...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,928
精华内容 1,171
关键字:

int类型的数据取值范围