c语言的int型数据范围和内存中存储是啥?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言的int型数据范围和内存中存储是啥?相关的知识,希望对你有一定的参考价值。

参考技术A

1、nt型为带符号整数类型,对于16位编译器,int占2字节8位;对于32位和64位编译器,int型占4字节32位。不同的占用空间,int型的范围也不同:2字节时,int 范围为-32768~32767;4字节时,int范围为-2147483648~2147483647。

无论是哪种存储方式,均是最高位为符号位,0代表正数,1代表负数。剩余位存储实际值。

2、字符是指计算机中使用的字母、数字、字和符号,包括:1、2、3、A、B、C、~!·#¥%??—*()——+等等。在 ASCII 编码中,一个英文字母字符存储需要1个字节。在 GB 2312 编码或 GBK 编码中,一个汉字字符存储需要2个字节。

3、字符型数据在内存中储存的是它的ASCII码值,它是一个字节,所有数据类型在内存中都是以0和1代码二进制储存的,这个原则不会变。

4、在UTF-8编码中,一个英文字母字符存储需要1个字节,一个汉字字符储存需要3到4个字节。在UTF-16编码中,一个英文字母字符或一个汉字字符存储都需要2个字节(Unicode扩展区的一些汉字存储需要4个字节)。在UTF-32编码中,世界上任何字符的存储都需要4个字节。

5、char是C/C++整型数据之一,其它的如int/long/short等不指定signed/unsigned时都默认是signed,char在标准中是unsigned,编译器可以实现为带符号的,也可以实现为不带符号的,有些编译器如pSOS的编译器,还可以通过编译开关来指定它是有符号数还是无符号数。

C语言int的取值范围

就像知道int的取值范围
在内存中分配2个字节 也就16位的二进制
-32768 怎么来的
32767又是怎么来的
0111 1111 1111 1111
我知道最高位代表符号位 上面的十进制为 32767
最小取值应该是最小的负数
1111 1111 1111 1111
搞晕了 可能给我说明一下!

C语言int的取值范围在32/64位系统中都是32位,范围为-2147483648~+2147483647,无符号情况下表示为0~4294967295。

C/C++编程语言中,int表示整型变量,是一种数据类型,用于定义一个整型变量,在不同编译环境有不同的大小,不同编译运行环境大小不同。

C的数据类型包括:整型、字符型、实型或浮点型(单精度和双精度)、枚举类型、数组类型、结构体类型、共用体类型、指针类型和空类型。

基本数据类型:

void:声明函数无返回值或无参数,声明无类型指针,显示丢弃运算结果。(C89标准新增)

char:字符型类型数据,属于整型数据的一种。(K&R时期引入)

int:整型数据,表示范围通常为编译器指定的内存字节长。(K&R时期引入)

float:单精度浮点型数据,属于浮点数据的一种。(K&R时期引入)

double:双精度浮点型数据,属于浮点数据的一种。(K&R时期引入)

_Bool:布尔型(C99标准新增)

_Complex:复数的基本类型(C99标准新增)

_Imaginary:虚数,与复数基本类型相似,没有实部的纯虚数(C99标准新增)

_Generic:提供重载的接口入口(C11标准新增)

扩展资料:

1989年,ANSI发布了第一个完整的C语言标准——ANSI X3.159—1989,简称“C89”,不过人们也习惯称其为“ANSI C”。

C89在1990年被国际标准组织ISO(International Standard Organization)一字不改地采纳,ISO官方给予的名称为:ISO/IEC 9899,所以ISO/IEC9899: 1990也通常被简称为“C90”。

1999年,在做了一些必要的修正和完善后,ISO发布了新的C语言标准,命名为ISO/IEC 9899:1999,简称“C99”。

在2011年12月8日,ISO又正式发布了新的标准,称为ISO/IEC9899: 2011,简称为“C11”。

参考资料:

百度百科-C语言

百度百科-int函数

参考技术A

16位的int取值范围分为无符号整型(unsigned int)和有符号整型(signed int)。

无符号整型是0000 0000 0000 0000 ~ 1111 1111 1111 1111,对应的十进制数为0到65535(即2^16-1)。

要理解有符号整型首先要了解两个规定:

    符号位:对于有符号整型,存储单元中最高位代表符号位:0为正,1为负。

    有符号整型的负数表示方法:补码(原码先取反再加1得到补码)。

-------------------------------------------------------------------------------

举例:表示16位的-1。

1的原码:0000 0000 0000 0001;

取反(01互换):1111 1111 1111 1110;

加1:1111 1111 1111 1111。

得到-1的补码为1111 1111 1111 1111。

所以16位二进制有符号整型的-1就表示为1111 1111 1111 1111。

-------------------------------------------------------------------------------

所以16位二进制数有符号整型的表示范围为:

正数,最高位为0,取值范围如下:

0000 0000 0000 0001 到 0111 1111 1111 1111

对应的十进制数为1到32767(2^15-1)。

0,全部位为0:

0000 0000 0000 0000。

负数,最高位为1,取值范围如下(以补码形式表示):

1111 1111 1111 1111 到 1000 0000 0000 0000 

对应的十进制数为-32768到-1,即-2^15到-1。

综上,16位二进制数有符号整型的取值范围是-32768到32767。

加深理解:题主问题中问-32768(-2^15)怎么来的,1000 0000 0000 0000在无符号整型中表示2^15怎么在有符号整型中就表示-2^15了呢?这里可以通过补码减1取反倒推出原码。

补码:1000 0000 0000 0000

减1:0111 1111 1111 1111

取反得到原码:1000 0000 0000 0000(2^15)

原码补码相同,只是个巧合。

参考技术B 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
参考技术C c语言int的取值范围在32/64位系统中都是32位,范围为-2147483648,+2147483647,无符号情况下表示为0,4294967295。c/c++编程语言中,int表示整型变量,是一种数据类型,用于定义一个整型变量,在不同编译环境有不同的大小,不同编译运行环境大小不同。c的数据类型包括:整型、字符型、实型或浮点型(单精度和双精度)、枚举类型、数组类型、结构体类型、共用体类型、指针类型和空类型。基本数据类型:void:声明函数无返回值或无参数,声明无类型指针,显示丢弃运算结果。(c89标准新增)。char:字符型类型数据,属于整型数据的一种。(k&r时期引入)。int:整型数据,表示范围通常为编译器指定的内存字节长。(k&r时期引入)。float:单精度浮点型数据,属于浮点数据的一种。(k&r时期引入)。double:双精度浮点型数据,属于浮点数据的一种。(k&r时期引入)。_bool:布尔型(c99标准新增)。_complex:复数的基本类型(c99标准新增)。_imaginary:虚数,与复数基本类型相似,没有实部的纯虚数(c99标准新增)。_generic:提供重载的接口入口(c11标准新增)。 参考技术D 负数是用补码保存的,所以1111 1111 1111 1111 按十六位有符号整数转换为十进制数字就是-1,是最大的负整数。

-32768的转换过程是:

先将32768(-32768的绝对值)按位取反,结果就是0111 1111 1111 1111

之后再将取反后的结果加1,就得了-32768的二进制存储:1000 0000 0000 0000

请自行查找 补码 的相关知识仔细研读吧!

以上是关于c语言的int型数据范围和内存中存储是啥?的主要内容,如果未能解决你的问题,请参考以下文章

C语言里int和short型变量的区别是啥??

long long 在c语言中是啥类型

在C语言中,unsigned char是啥类型

C语言中,unsigned int型数据的取值范围是

C语言中的整型变量是啥意思?求详解

C语言int的取值范围