C语言的int 为啥最小值是-32768
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言的int 为啥最小值是-32768相关的知识,希望对你有一定的参考价值。
在C语言中 int 的最小取值范围是-32768 。
也就是 1000 0000 0000 0000 , 而不是 1111 1111 1111 1111 1111
哪位高手能帮我解释一下。谢谢了
C语言中,int若是规定大小为两个字节,则其最小值就是-32768。
原因是:
两个字节是16位,规定第一位为符号位,则其能表示的数值范围是-2^15~2^15-1,即-32768~32767。但最小值为什么是-32768,为什么不是-32767呢?
原来人们发现若是在内存中直接存放数的原码,则0000 0000 0000 0000和1000 0000 0000 0000分别表示+0和-0,其值都是0,用两个值表示同一个值,这样太浪费空间了。
于是人们最后决定在内存中存放数的补码,这样+0和-0的存放形式就都是0000 0000 0000 0000了,但是同时也多出来一个1111 1111 1111 1111,它并不是任何一个数的补码,于是将其规定为-32768。
这样表示的话,正数最大值是32767,负数最小值是-32768。
从 0到 32767,用二进制是从:00000000到01111111 。
从-1到-32768,用二进制是从:11111111到10000000 。
扩展资料:
C语言的优点:
优点
1、简洁紧凑、灵活方便
C语言一共只有32个关键字,9种控制语句,程序书写形式自由,区分大小写。把高级语言的基本结构和语句与低级语言的实用性结合起来。C 语言可以像汇编语言一样对位、字节和地址进行操作,而这三者是计算机最基本的工作单元。
C语言的 Hello World 程序
2、运算符丰富
C语言的运算符包含的范围很广泛,共有34种运算符。C语言把括号、赋值、强制类型转换等都作为运算符处理。从而使C语言的运算类型极其丰富,表达式类型多样化。灵活使用各种运算符可以实现在其它高级语言中难以实现的运算。
3、数据类型丰富
C语言的数据类型有:整型、实型、字符型、数组类型、指针类型、结构体类型、共用体类型等。能用来实现各种复杂的数据结构的运算。并引入了指针概念,使程序效率更高。
4、表达方式灵活实用
C语言提供多种运算符和表达式值的方法,对问题的表达可通过多种途径获得,其程序设计更主动、灵活。它语法限制不太严格,程序设计自由度大,如对整型量与字符型数据及逻辑型数据可以通用等。
5、允许直接访问物理地址,对硬件进行操作
由于C语言允许直接访问物理地址,可以直接对硬件进行操作,因此它既具有高级语言的功能,又具有低级语言的许多功能,能够像汇编语言一样对位(bit)、字节和地址进行操作,而这三者是计算机最基本的工作单元,可用来写系统软件。
6、生成目标代码质量高,程序执行效率高
C语言描述问题比汇编语言迅速,工作量小、可读性好,易于调试、修改和移植,而代码质量与汇编语言相当。C语言一般只比汇编程序生成的目标代码效率低10%~20%。
7、可移植性好
C语言在不同机器上的C编译程序,86%的代码是公共的,所以C语言的编译程序便于移植。在一个环境上用C语言编写的程序,不改动或稍加改动,就可移植到另一个完全不同的环境中运行。
8、表达力强
C语言有丰富的数据结构和运算符。包含了各种数据结构,如整型、数组类型、指针类型和联合类型等,用来实现各种数据结构的运算。C语言的运算符有34种,范围很宽,灵活使用各种运算符可以实现难度极大的运算。
C语言能直接访问硬件的物理地址,能进行位(bit)操作。兼有高级语言和低级语言的许多优点。
它既可用来编写系统软件,又可用来开发应用软件,已成为一种通用程序设计语言。
另外C语言具有强大的图形功能,支持多种显示器和驱动器。且计算功能、逻辑判断功能强大。
参考资料来源:百度百科-C语言
2 原因
两个字节是16位,规定第一位为符号位,则其能表示的数值范围是-2^15~2^15-1,即-32768~32767。但最小值为什么是-32768,为什么不是-32767呢?
原来人们发现若是在内存中直接存放数的原码,则0000 0000 0000 0000和1000 0000 0000 0000分别表示+0和-0,其值都是0,用两个值表示同一个值,这样太浪费空间了。
于是人们最后决定在内存中存放数的补码,这样+0和-0的存放形式就都是0000 0000 0000 0000了,但是同时也多出来一个1111 1111 1111 1111,它并不是任何一个数的补码,于是将其规定为-32768。 参考技术B 计算机用二进制表示负数是用的“补码法”,做法是正数按原码,负数用其相反数的反码加一。
这种结果用-32768代替了“-0”,可以使符号位能与有效值部分一起参加运算,从而简化运算规则;同时使减法运算转换为加法运算,进一步简化计算机中运算器的线路设计。
举例:
3的码值是 00000011,-3则为:11111100+1= 11111101
32767的码值是01111111,11111111(15个1),-32767是
10000000,00000000+1=10000000,00000001
-32768是01111111,11111111+1=10000000,00000000本回答被提问者采纳 参考技术C 因为最高位是符号位,1表示是负数,0表示是非负数。
1000 0000 0000 0000,这个中的1表示是负数,它是1111 1111 1111 1111 + 1得来的,1 0000 0000 0000 0000,但是只有8位,又1000 0000 0000 0000没有占用,所以规定它最最小的负数。0000 0000 0000 0000表示0。 参考技术D 计算机里的数是通过补码来储存的。
第一位是符号位,1表示负数,0表示正数。
根据补码的原则,正数的补码为其本身,负数的补码为其对应的二进制代码去反加1。
你可以把按照这个计算方法把两个数字算一下,看哪个更小。
C语言中定义int变量,默认值是多少
如果是定义的全局变量或者静态变量,未初始化的话就是0.如果是局部变量,那就是以前残留在堆栈里的随机值。
区分变量的类型,有两种情况。
1、局部变量。
局部变量在没有显式初始化时,其值C语言规范没做要求,可以是随机值,也可以是编译器随意给定的值。
比如gcc编译器的局部变量就是随机值,可能为任何值。而微软的编译器,如VC或VS,则会初始化为全c,即0xCCCCCCCC。
2、全局变量或静态局部变量。
所有的全局变量,即定义在函数外的变量,默认值为0。
所有的静态局部变量,即定义在函数内部的static int name形式的,默认初始化为0。
扩展资料:
int是一种数据类型,在编程语言(C、C++、C#、Java等)中,是用于定义整数类型变量的标识符。
目前在一般的电脑中,int占用4字节,32比特,数据范围为-2147483648~2147483647[-2^31~2^31-1]
在之前的微型机中,int占用2字节,16比特,数据范围为-32768~32767[-2^15~2^15-1]
定义方法:
int i;//定义整形变量i
int i=1;//定义整形变量i并初始化为1
定义常量:
const int i;//编译错误,因为常量需要给予一个初值
const int i=1;//定义常量i,值为1
Java定义常量:
final int i=1;//定义常量i,值为1
参考资料来源:百度百科-INT (数据类型)
参考技术A 区分变量的类型,有两种情况。1 局部变量。
局部变量在没有显式初始化时,其值C语言规范没做要求,可以是随机值,也可以是编译器随意给定的值。
比如gcc编译器的局部变量就是随机值,可能为任何值。而微软的编译器,如VC或VS,则会初始化为全c,即0xCCCCCCCC。
2 全局变量或静态局部变量。
所有的全局变量,即定义在函数外的变量,默认值为0。
所有的静态局部变量,即定义在函数内部的
static int name;
形式的,默认初始化为0。 参考技术B 如果是定义的全局变量或者静态变量,未初始化的话就是0.如果是局部变量,那就是以前残留在堆栈里的随机值。本回答被提问者和网友采纳 参考技术C c不负责初始化空间 参考技术D 如一楼
以上是关于C语言的int 为啥最小值是-32768的主要内容,如果未能解决你的问题,请参考以下文章
C语言int 取最小值为啥是-32768而不能是-32769