现在的C语言编辑器里的int范围为什么是-2147483648~2147483647 2014-08-05 10:21 100人阅读 评论(0) 收藏
下面是引用百度文库的一段话:
“这得从二进制的原码说起:
如果以最高位为符号位,二进制原码最大为0111111111111111=215-1=32767 最小为1111111111111111=-(215-1)=-32767
此时0有两种表示方法,即正0和负0:0000000000000000=1000000000000000=0
所以,二进制原码表示时,范围是-32767~-0和0~32767,因为有两个零的存在,所以不同的数值个数一共只有216-1个,比16位二进制能够提供的216个编码少1个。 但是计算机中采用二进制补码存储数据,即正数编码不变,从0000000000000000到
0111111111111111依旧表示0到32767,而负数需要把除符号位以后的部分取反加1,即-32767的补码为1000000000000001。
到此,再来看原码的正0和负0:0000000000000000和1000000000000000,补码表示中,前者的补码还是0000000000000000,后者经过非符号位取反加1后,同样变成了
0000000000000000,也就是正0和负0在补码系统中的编码是一样的。但是,我们知道,16位二进制数可以表示216个编码,而在补码中零的编码只有一个,也就是补码中会比原码多一个编码出来,这个编码就是1000000000000000,因为任何一个原码都不可能在转成补码时变成1000000000000000。所以,人为规定1000000000000000这个补码编码为-32768。 所以,补码系统中,范围是-32768~32767。
因此,实际上,二进制的最小数确实是1111111111111111,只是二进制补码的最小值才是1000000000000000,而补码的1111111111111111是二进制值的-1。 ”
因为当时的计算机普遍是16位,而现在的计算机普遍32位,所以上面的结论也就相应的变成了-2的31次方到2的31次方。这样的话范围是-2147483647~2147483647 但是由于人为规定的100000…000(31个0)为-2147483648,所以范围就变成了-2147483647~2147483647 。
下面再讲一下关于算术溢出的问题的问题,溢出就是取模。弄懂了原码、补码的概念后,会发现其实都是有规律可循的。比如-1强制转换成unsigned int 后是4294967295.
int的范围是:-2147483648~2147483647 unsigned int的范围是:0~4294967295。如果超出这个范围会出现循环比如-2147483648-1=2147483647;4294967295+1=0;
也可以堪称是取模后的说,比如int的模是 2147483648(2的31次方)。unsigned int的模是4294967296(2的32次方);比如4294967297%4294967296=1(与超出范围得到的结果相同4294967297超出2所以-1+2=1);
计算机的处理方式真的很神奇,这样最大的数+1变成了最小的数,最小的数-1又成了最大的数。所有的数都连成了一个圆环。
要注意的是-2147483648这个数虽然是int的下限,但是计算机在处理的时候先是2147483648再加上一个-运算符,但是2147483648这一步的时候已经超出的int的范围,所以它比较特殊,直接赋值int a=-2147483648VC会有警告,(处理办法是int a=-2147483647-1就没警告了,或者是调用#include<Limits.h>里的常量INT_MIN)
版权声明:本文为博主原创文章,未经博主允许不得转载。
现在的C语言编辑器里的int范围为什么是-2147483648~2147483647 2014-08-05 10:21 100人阅读 评论(0) 收藏的更多相关文章
- 菜鸟学习-C语言函数参数传递详解-结构体与数组 分类: C/C++ Nginx 2015-07-14 10:24 89人阅读 评论(0) 收藏
C语言中结构体作为函数参数,有两种方式:传值和传址. 1.传值时结构体参数会被拷贝一份,在函数体内修改结构体参数成员的值实际上是修改调用参数的一个临时拷贝的成员的值,这不会影响到调用参数.在这种情况下 ...
- 百度编辑器ueditor插入表格没有边框,没有颜色的解决方法 2015-01-06 09:24 98人阅读 评论(0) 收藏
百度富文本编辑器..很强大.. - - ,不过有些BUG..真的很无解.. 最近用这个,发现上传的表格全部没有表框.. 解决办法如下: 转载的.. 百度编辑器ueditor插入一个表格后,在编辑过程中 ...
- setprecision(int n)等格式函数用法 分类: POJ 2015-06-11 10:56 17人阅读 评论(0) 收藏
**这些用法前最好用 #include <iostream> //不要用iostream.h ,会出现好多问题 #include <iomanip> // io 流控制头 ...
- C语言中返回字符串函数的四种实现方法 2015-05-17 15:00 23人阅读 评论(0) 收藏
C语言中返回字符串函数的四种实现方法 分类: UNIX/LINUX C/C++ 2010-12-29 02:54 11954人阅读 评论(1) 收藏 举报 语言func存储 有四种方式: 1.使用堆空 ...
- C语言之void类型及void指针 分类: C/C++ 2015-07-13 11:24 8人阅读 评论(0) 收藏
原文网址:http://www.cnblogs.com/pengyingh/articles/2407267.html 1.概述 许多初学者对C/C 语言中的void及void指针类型不甚理解,因此在 ...
- c语言基础:数据类型 分类: iOS学习 c语言基础 2015-06-10 21:43 9人阅读 评论(0) 收藏
C语言基本数据类型大体上分为: 整型 和 浮点型 字节: 计算机中最小的储存单位 1 Byte = 8 bit 整型: int 4 ...
- C语言基础总结 分类: iOS学习 c语言基础 2015-06-11 10:08 23人阅读 评论(0) 收藏
//欲练此功必先自宫!!! //第一天:C语言的基础 //进制 //2进制, 10进制, 8进制, 16进制 //注:8进制数前加0, 16进制数前加0x ...
- 百度编辑器UEditor ASP.NET示例Demo 分类: ASP.NET 2015-01-12 11:18 346人阅读 评论(0) 收藏
在百度编辑器示例代码基础上进行了修改,封装成类库,只需简单配置即可使用. 完整demo下载 版权声明:本文为博主原创文章,未经博主允许不得转载.
- C语言基础:进制转换,变量,常量,表达式,基本数据类型,输出函数,输入函数,运算符. 分类: iOS学习 c语言基础 2015-06-10 21:39 25人阅读 评论(0) 收藏
二进制:以0b开头,只有0和1两种数字.如0101 十进制:0~9十个数字表示.如25 十六进制:以0~9,A~F表示,以0X开头.如0X2B 十进制转换为X进制:连除倒取余 X进制转换为十进制:按权 ...
随机推荐
- ES6 函数参数的默认值
基本用法 在ES6之前,不能直接为函数的参数指定默认值,只能采取变通的方法. function log(x,y){ y = y||'world'; console.log(x,y); } log('k ...
- [转] Spring@Autowired注解与自动装配
1 配置文件的方法 我们编写spring 框架的代码时候.一直遵循是这样一个规则:所有在spring中注入的bean 都建议定义成私有的域变量.并且要配套写上 get 和 set方法. Boss ...
- atomic与nonatomic的区别
原子性(atomic):某操作具备整体性,也就是说,系统其他部分无法观察到其中间步骤所生成的临时结果,而只能看到操作前与操作后的结果,那么就称改操作就是“原子的”(atomic),或者说,该操作具备“ ...
- 小程序把图片转换成base64
1.首先需要到upng.js,然后upng.js需要pako.js,先一并下载了 2.然后就可以直接用了,具体代码如下: <!--pages/base/base.wxml--> <c ...
- Apache的Order Allow,Deny详解
Allow和Deny可以用于apache的conf文件或者.htaccess文件中(配合Directory, Location, Files等),用来控制目录和文件的访问授权. 所以,最常用的是: O ...
- IntelliJ IDEA java开发 WebService
测试的功能是通过访问solr服务器,获取相关信息,然后以webservice的形式供客户端访问来获取数据.通过查询资料,现在把过程记录如下: 1.环境 IntelliJ IDEA 2017.2.6 J ...
- thinkphp5.0 中使用第三方无命名空间的类库
ThinkPHP5建议所有的扩展类库都使用命名空间定义,如果你的类库没有使用命名空间,则不支持自动加载,必须使用Loader::import方法先导入文件后才能使用. 首先要在文件头部使用loader ...
- 【Linux】debian jessie版本安装1.9 svn
今天封装使用官方mysql docker镜像时,发现svn版本有问题.需要更新到1.9版本.方法如下. Subversion 1.9 on Debian Jessie November 4, 2015 ...
- Apatche httpd + Django + Mysql web server 搭建
Required: httpd: 2.4.18 django : 1.8.7 mysql: 5.7.10 MySQL-python: 1.2.3 mod_wsgi: 4.4.21 Offical Do ...
- 细数Python的特殊方法一:集合类
1. 特殊方法汇总列表 2. 仿集合类 __len__:返回对象的长度 __getitem__:获得某一项的值 __setitem__:设置莫一项的值 __delitem__删除某一项 __c ...