在C语言中,int类型存储的最大的数是2^32,为啥?为啥不是2^31

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在C语言中,int类型存储的最大的数是2^32,为啥?为啥不是2^31相关的知识,希望对你有一定的参考价值。

C语言中的int型在不同的机器上位数不同,其表示的数范围也不同。鄙人假设你说的int型是32位。

C中的int型使用补码表示,也就是32位补码,最高位为符号位,1代表负,0代表正。一个int型变量存储形式为x =   符号位(1bit),  数值位(31bit)  。


一个int型变量最大值即32bit补码能表示的正数最大值。1bit符号位为0,31bit数值位,每位可以有0, 1两种组合,31位可以有2^31种组合,最大正数即数值位全为1时能取到:

二进制(0;111,1111,1111,1111,1111,1111,1111,1111) = 7FFFFFFFH,按等比数列计算结果为 2^0 + 2^1 + 2^2 + ... + 2^30 = [1*(1-2^31)] / (1-2) = 2^31 - 1


综上所述,32bit的int型表示的最大正整数既不是2^32,也不是2^31,是(2^31 - 1) = 2,147,483,648,大约21亿。

参考技术A int类型在内存中占4个字节,也就是用32位二进制表示。其中最高位为符号位,0表示正,1表示负。
int类型正数上限二进制表示为0111 1111 1111 1111即(2^32)-1,表示0的符号位是0(即最高位是0):0000 0000 0000 0000
由于0已经被正数这一边表示了,所以负数的1000 0000 0000 0000就可以用来表示-2^32
参考技术B 错了。在C语言中,int类型存储的最大的数不是2^32,而是-2^31~(2^31)-1本回答被提问者和网友采纳

C语言变量的基本类型都有哪些?

c语言的变量有三种类型:char,int,float,double

其中char为字符类型的变量是八位的,最前一位作为符号位,后面七位作为数据位.它的存储范围在-128到127之间.

int整数类型的变量是16位的,最前一位为符号位,后面的15位作为数据位.它的存储范围在-215到215-1.也就是-32768到32767.它不包扩小数点以后的数,在一般编译器中给int类型赋予带有小数的数.编译器会自动去掉小数点后面的数保留整数部分.

float为浮点数类型.首先要说明的是浮点数有两部分组成,第一部分是指数,也就是多少次幂嘛.第二部分是由尾数组成也就是一个数科学表示发之后除去幂那部分剩下的(呵呵!!!)如1.33333.那么c中的浮点数就有三部分.32位的浮点数第一位就是第一部分它决定数的符号.第二部分是八位的指数.第三部分是23位的尾数.所以浮点数具有6到7位的存储精确度.范围为3.4e-38到3.4e+38的数值.注:3.1415926e+7表示3.1415926.0.在给浮点数赋值的时候可以采用如下方法.123.45和1.2345e2是等价的.

double为双精度型变量.c编译器通常用64位来存储双精度性变量.它的精确度能够达到14到15位.64位中第一位是符号位.后面的11位是指数位.最后的52位是尾数.它的范围是-1.7e-308到1.7e+308.

类型标识符:unsigned,short,register,long和signed.

其中unsigned提示编译器不要保留符号位,这样可以扩大数据类型正数的范围.比如unsigned int的范围就变位0到65535了.

short类型用在有的编译器不能给太大的存储范围,需要给一个比较低的溢出界限.比如有的编译器就用的是32位来存储int类型.用short来标识它可以保证int是用16位来标识的.

register表示一个变量可能会用得很频繁.需要很快得存取速度所以指定的把它存到寄存器当中.

long表示不希望用16位来存储整形变量时可以用long指定它用32位来存储可以得到更大得表示范围.

当然还有long unsigned int 这样得类型.

用户自定义数据类型

用户可以使用typedef来自己定义自己需要得数据类型.如下例:

typedef unsigned long int myint;

myint num1;

这样num1就是unsigned long int类型的了.
参考技术A

C语言的数据类型大致可以分为下图中的几类:

C语言中用变量来存储计算过程使用的值,任何变量都必须先定义类型再使用。为什么一定要先定义呢?因为变量的类型决定了变量占用的存储空间,所以定义变量类型,就是为了给该变量分配适当的存储空间,以便存放数据。

比如你是char类型,我就只给你分配1个字节就够了,没必要分配2个字节、3个字节乃至更多的存储空间。

知识扩展(变量的命名规则):

1、命名应当直观且可以拼读,可望文知意,便于记忆和阅读。标识符最好采用英文单词或其组合,不允许使用拼音。程序中的英文单词一般不要太复杂,用词应当准确。

2、命名的长度应当符合“min-length && max-information”原则。C 是一种简洁的语言, 命名也应该是简洁的。例如变量名MaxVal 就比MaxValueUntilOverflow 好用。标识符的长度一般不要过长,较长的单词可通过去掉“元音”形成缩写。

参考技术B

基本类型如图所示

拓展资料:

short占据内存2个byte;int占据内存4 个byte;long占据内存4 个byte;float占据内存4个byte;double占据内存8 个byte;char占据内存1 个byte。

变量来源于数学,是计算机语言中能储存计算结果或能表示值抽象概念。变量可以通过变量名访问。在指令式语言中,变量通常是可变的;但在纯函数式语言(如Haskell)中,变量可能是不可变(immutable)的。在一些语言中,变量可能被明确为是能表示可变状态、具有存储空间的抽象(如在Java和Visual Basic中);但另外一些语言可能使用其它概念(如C的对象)来指称这种抽象,而不严格地定义“变量”的准确外延。

参考技术C 基本类型只有int,float,double,char四种。 参考技术D int整型
float单浮点型
double双浮点型
char字符型
string字符串
指针变量

以上是关于在C语言中,int类型存储的最大的数是2^32,为啥?为啥不是2^31的主要内容,如果未能解决你的问题,请参考以下文章

C语言培训手册

redis源码学习_整数集合

c语言 int最大值是多少??

C语言 一个int型到底可以表示多大的数字?

int类型最大能存储到哪一位

int的最大值是多少?