我们来一起看下,C语言中,对于Integer Type(整数形式)的unsigned与signed两种形式的区别,以及在内存中的存储方式是如何的

Integer type(整数形式)是C语言中的基本数据形式之一,可以究竟对于Integer的定义是什么呢? 翻书看下,在介绍Integer的时候,还有一个关键词就是size(范围)

The C Programming Language 写道
an integer,typically reflecting  the natural size of integers on the host machine
Programming in ANSI C 写道
Integers are whole numbers with a range of values supported by a particular machine.

所以说,Integer是一个范围内的所有整数,但是范围是就特定计算机而言的(depends on computer).

开始之前,先来了解下很基础的知识 - 计算机的存储单位和整数存储在计算机所占的内存大小。 
1).计算机最小的存储单位是“位” 也就是bit或binary digits,用来存放一个二进制数,即 0或1。 8个二进制位为一个字节Byte。 
2).对于 16-bit(16位)的计算机,int是以两个字节来储存的,而32-bit的计算机,则是以4个字节,即32个bit来储存的。

如果想要明白singed与unsigned的区别,除了这两个基本知识,还需要了解整数在计算机中的存储方式,以16-bit 计算机为例,定义 int a = 1; 那么a的存储方式用表格来表示

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1

首先需要提到的一点是,在C语言中十进制的整数都会转化为二进制存储在计算机。继续,上面所声明的 int a = 1,也就是 int signed a =1,C语言默认a是一个signed类型。 上面表格中最左端的为最高位,最右端的为最低位。signed类型的整数,只用了去除最高位,剩下的15位来进行编码的,而最高位只是用来做标记(sign),标记整数的正负,0表示正,1表示负。所以对于signed的整数,的存储范围是(-2^15 to 2^15-1),也就是 -32768 到 +32767的整数。 
而对于unsigned的整数,其16位全部用来编码,存储范围便是(0 to 2^16-1),即 0到 65535 的非负整数。所以呢 你可以声明 int a = 1,或者 int a = -1, 但是不可以声明 unsigned a = -1 。但是需要提到的一点是,不管整数的类型是signed 还是 unsigned,都用了16位来存储,也就是说16位全部用来存储数据

上面所看到 a=1 的存储方式,就是将十进制的a在 程序员计算器 上转化为2字节的2进制,然后将这个结果放到上面的表格里。(原码存储) 
可是对于 int a = -1 是怎样存储的?也就是说负数的存储方式是怎样的? 
负数是以(补码存储),即是以原码的补码形式存储,看下面的表格

原码

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1

反码

1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0

反码就是将原码中的二进制1改为0,二进制0改为1。下面取得反码之后,在反码的基础上加上1.即  
补码

1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

不知道,说到这里,大家会不会有个疑惑,上面所说的signed与unsigned的范围是有交集的,即都包含了0到+32767范围的整数,那么这个范围的整数在声明为signed与unsigned的时候,存储方式一样吗?答案是肯定的,在这个范围内的整数,signed与unsigned 的存储方式是一样的。

刚开始学C,我也不清楚弄明白这些编码方式,存储方式有什么意义,我现在个人觉得,只是在声明int的时候,如果不能保证它的正整数性,就不要声明为unsigned,当然可以保证的前提下声明为unsigned,确实扩大了范围。

http://chuansu.iteye.com/blog/1435150

C语言 unsigned与signed区别相关推荐

  1. C语言unsigned与signed使用辨析

    一些说明 操作系统: windows xp x32 编译器:VC++ 6.0 测试只针对整型变量,因为浮点型变量的IEEE存储方式本身就包含了符号位. 使用场景 定义一个整型变量x;,如果我们会在x中 ...

  2. 浅谈unsigned与signed的区别

    在我们写c语言的程序中,总是能看见unsigned的关键字,unsigned的作用是声明无符号的整形类型,与signed对应.这个关键字是挺常见的. unsigned:用来声明无符号的整形变量 sig ...

  3. C语言的补码表示和unsigned及signed的转换

    这东西实际编程时一直无视的,范围小了就换个大点的表示形式,但是总觉得基础知识还是掌握得好,免得到时候用移位运算或类型转换或笔试题时要花时间想. C语言的基本类型有char.int.float.doub ...

  4. c# char unsigned_C 中 char、signed char 和 unsigned char 的区别

    C 中 char.signed char 和 unsigned char 的区别 来源:http://bbs.chinaunix.net/thread-889260-1-1.html 参考:https ...

  5. c语言 int是signed,C语言的补码表示和unsigned及signed的的转换

    这东西实际编程时一直无视的,范围小了就换个大点的表示形式,但是总觉得基础知识还是掌握得好,免得到时候用移位运算或类型转换或笔试题时要花时间想. C语言的基本类型有char.int.float.doub ...

  6. int signed in mysql_【转】mysql 中int类型字段unsigned和signed的区别

    转自https://www.cnblogs.com/wangzhongqiu/p/6424827.html 用法: mysql> CREATE TABLE t ( a INT UNSIGNED, ...

  7. c语言unsigned int 范围,unsigned int 32比特数据范围为-2147

    提到unsigned,大家应该都了解,有朋友问c语言中unsigned什么意思,还有人想问c语言中的unsigned是什么意思,这到底是咋回事?事实上unsigned呢,下面是小编推荐给大家的unsi ...

  8. C语言 typedef 和 define 区别 - C语言零基础入门教程

    目录 一.typedef 简介 1.typedef 简化复杂的类型声明 A.定义普通变量 B.定义函数指针 C.定义结构体 2.定义与平台无关的类型 二.define 简介 三.typedef 和 d ...

  9. C语言 memcpy和memcpy_s区别 - C语言零基础入门教程

    目录 一.memcpy 和 memcpy_s 函数区别 1.语法对比 memcpy_s 函数语法 memcpy 函数语法 2.memcpy 和 memcpy_s 相同点 3.memcpy 和 memc ...

最新文章

  1. R语言构建logistic回归模型并评估模型:计算混淆矩阵、并基于混淆矩阵计算Accuray、Precision、Recall(sensitivity)、F1、Specificity指标
  2. Swift 5 发布,ABI 终于稳定了
  3. Java黑皮书课后题第7章:7.8(求数组的平均值)使用下面的方法头编写两个重载的方法,返回数组的平均数。编写一个测试程序,提示用户输入10个double型值,然后调用这个方法显示平均值
  4. .NET Framework 2.0新增特性总结
  5. [ARM-Linux开发] 主设备号--驱动模块与设备节点联系的纽带
  6. UIScrollView无法滚动
  7. VVOL和VASA Provider
  8. promise的理解和应用
  9. linux修改系统语言为中文
  10. R语言使用epiDisplay包的lroc函数可视化logistic回归模型的ROC曲线并输出诊断表、输出灵敏度、1-特异度、AUC值等、设置auc.coords参数指定AUC值在可视化图像中的位置
  11. 谷歌广告联盟(Google Adsense)通过网站获利功能在线创收
  12. 哪几种MM最受男孩喜欢?(组图)
  13. 英语考研——目的状语从句
  14. video全局事件属性
  15. 大数据电信客服项目一——数据生成
  16. 第十三届蓝桥杯 2022年省赛真题(Java 大学C组)
  17. 三跨计算机考研学校推荐,考研实现三跨—跨学校,跨地区,跨学科现实吗?
  18. 高效算法,B*寻路算法,python版,思维优化(1)
  19. 【超融合】超融合“火不火”?
  20. maven oracle 10.2.0.4.0,马文介绍说ojdbc:ojdbc14-10.2.0.4.0.jar,Maven,引入,ojdbcojdbc14102040jar...

热门文章

  1. python 读excel pandas_Python使用Pandas读写EXCEL文件教程
  2. python升级pip版本后,pycharm还是显示老版本的解决办法
  3. 后端: 判断手机是否已经root
  4. async和await以及promise的区别
  5. 如何白嫖最新版BurpSuite Pro
  6. 联想650服务器做系统,联想RD650阵列 安装系统步骤
  7. 用命令卸载Win8 IE9/IE10/IE11浏览器
  8. 物料描述模板技术解析及10个典型行业实践示例
  9. 爬取历史天气数据并绘制成折线图
  10. F.cross_entropy和F.binary_cross_entropy_with_logits