`
ijavagos
  • 浏览: 1248209 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

C语言中int的取值范围是怎么算出来的

 
阅读更多
来源:
http://blog.sina.com.cn/s/blog_59eb86d70100hvp1.html这得从二进制的原码说起:
如果以最高位为符号位,二进制原码最大为0111111111111111=2的15次方减1=32767
最小为1111111111111111=-2的15次方减1=-32767
此时0有两种表示方法,即正0和负0:0000000000000000=1000000000000000=0
所以,二进制原码表示时,范围是-32767~-0和0~32767,因为有两个零的存在,所以不同的数值个数一共只有2的16次方减1个,比16位二进制能够提供的2的16次方个编码少1个。
但是计算机中采用二进制补码存储数据,即正数编码不变,从0000000000000000到0111111111111111依旧表示0到32767,而负数需要把除符号位以后的部分取反加1,即-32767的补码为1000000000000001。
到此,再来看原码的正0和负0:0000000000000000和1000000000000000,补码表示中,前者的补码还是0000000000000000,后者经过非符号位取反加1后,同样变成了0000000000000000,也就是正0和负0在补码系统中的编码是一样的。但是,我们知道,16位二进制数可以表示2的16次方个编码,而在补码中零的编码只有一个,也就是补码中会比原码多一个编码出来,这个编码就是1000000000000000,因为任何一个原码都不可能在转成补码时变成1000000000000000。所以,人为规定1000000000000000这个补码编码为-32768。
所以,补码系统中,范围是-23768~32767。
因此,实际上,二进制的最小数确实是1111111111111111,只是二进制补码的最小值才是1000000000000000,而补码的1111111111111111是二进制值的-1
分享到:
评论

相关推荐

    C语言数据类型及取值范围.doc

    在C语言中,数据类型是用来定义变量的存储大小和可能的值的范围。理解这些类型及其取值范围对于编写有效的、高效的代码至关重要。 首先,C语言的基本数据类型包括整型、浮点型和字符型。整型数据类型主要包括`char`...

    C语言中int到float的强制类型转换

    C语言中int到float的...我们可以看到C语言中int到float的强制类型转换是一个复杂的过程,需要了解int和float的取值范围、表示形式和转换原理。只有这样,我们才能正确地进行强制类型转换,避免可能的错误和精度损失。

    C语言基本数据类型的长度和取值范围

    在某些编译器中,`long`与`int`具有相同的长度和取值范围。然而,在其他系统中,`long`可能占用更多字节,以提供更大的取值范围。 8. **unsigned long** - 长度:4字节(32位) - 取值范围:0 ~ 4294967295 ...

    C程序怎样获得float的取值范围

    flaot取值范围 #include #include #include int main(int argc, char *argv[]) { printf("float分配%d字节\n",sizeof(float)); printf("%e\n",FLT_MIN);

    int型数字取值范围

    本文将详细解析在16位系统中`int`型数字的取值范围及其背后的原理。 首先,我们需明白计算机内部是如何存储和表示数据的。计算机使用一系列二进制位(即0和1)来存储所有的数据和指令。这些位被分组形成字节,而...

    C语言中取值符()与取地址符(&)

    C语言中取值符()与取地址符(&) C语言中取值符()和取地址符(&)是两个基本操作符,它们在C语言编程中扮演着极其重要的角色。然而,在刚开始学习C语言时,很多人都会对这两个操作符感到困惑,不知道如何正确地...

    c语言为什么int型的取址范围为-2的15次方到2的15次方减1

    在探讨C语言中int型取值范围为何设定为-2的15次方到2的15次方减1之前,我们首先需要理解二进制数的表示方式以及补码的概念,这对于理解整数类型的存储机制至关重要。 ### 二进制与原码 计算机内部使用二进制进行...

    各种数据类型的取值范围

    1. **类型差异**:虽然某些类型的名称相似(如 `short` 和 `int`),但它们在实际应用中代表不同的数据类型,具有不同的取值范围和存储需求。 2. **符号扩展**:将 `char` 或 `signed char` 转换为 `int` 时,最高...

    c语言中文API

    1. **基本数据类型**:C语言中的基本数据类型包括int、char、float、double等,它们代表整型、字符型、浮点型等不同类型的变量。了解这些数据类型及其大小、取值范围是编写C程序的基础。 2. **输入/输出(I/O)操作...

    C语言的数据类型与格式控制

    signed int 的取值范围为 -2^31 ~ 2^31-1,unsigned int 的取值范围为 0 ~ 2^32-1。 整型数据可以使用%d(有符号 10 进制)、%o(无符号 8 进制)、%x/%X(无符号 16 进制)等格式符进行输出。 需要注意的是,int...

    C语言中常用数据类型内存存储形式

    整型数据类型根据取值范围和内存占用的字节数不同,有short(短整型)、int(整型)、long(长整型)等。short通常占用2字节(16位),int通常占用4字节(32位),而long可能占用4字节或更多,这取决于操作系统的...

    C语言中二维数组作为函数参数来传递的三种方法

    C语言中二维数组作为函数参数来传递的三种方法 在C语言中,二维数组作为函数参数来传递是非常常见的操作。但是,如何正确地传递二维数组作为函数参数却是许多初学者和开发者经常混淆的地方。今天,我们将详细介绍...

    C语言--数据类型和取值范围

    在C语言里,数据类型即说明了它是什么类型的数据,更重要的是存储这类数据所需的内存的大小,C语言允许使用的类型如下:在基本类型中的整数类型、浮点数类型和字符类型都已经在之前的文章中使用过了,这里面的_Bool...

    C语言基础知识习题.pdf

    1. 整型:C语言中的整型可以是signed int或unsigned int,取值范围不同。 2. 实型:C语言中的实型可以是float或double,取值范围不同。 3. 字符型:C语言中的字符型可以是char,取值范围是-128到127。 4. 逻辑型...

    C语言中的运算符及其优先级.pdf

    C语言中的运算符及其优先级 C语言中的运算符是编程语言中最基本的组成部分,它们用于执行各种算术、逻辑、关系、赋值等操作。理解C语言中的运算符及其优先级是编写高效、正确的代码的关键。 一、数组下标运算符[] ...

    c语言期中考试试题及答案.pdf

    在C语言中,short类型通常用于存储较短的整数,其取值范围根据标准是-32768到32767。而int类型通常用于存储整数,其取值范围是0到65535。float类型用于单精度浮点数,double类型用于双精度浮点数。这些基本数据类型...

    初学C语言:03 C语言基础

    在C语言中,标识符是指变量、函数、数组、结构体等命名的名称。标识符的命名规则是: * 不能以数字开头 * 不能与关键字相同 * 不能包含汉字 * 建议命名应直观、易懂 * 建议命名不要太长 例如,有效的标识符命名有...

    电子科技大学c语言课件

    例如,整型在16位系统中通常占用2个字节,取值范围为-32768到32767;字符型占用1个字节,取值范围在-128到127之间。浮点型和双精度型用于表示小数,其中双精度型提供更高的精度。此外,还有类型修饰符如short、long...

    C语言基础 简单C语言应用程序

    理解这些数据类型及其内存占用、取值范围是学习C语言的第一步。 接下来是变量,它是存储数据的容器。在C语言中,我们需要先声明变量,指定其类型,然后才能使用。例如,`int age;`声明了一个整型变量age。初始化...

Global site tag (gtag.js) - Google Analytics