目录

  • 一、实验环境
  • 二、C语言整数简介
    • 1、类型说明符
      • (1) signed和unsigned
      • (2) 省略书写
    • 2、sizeof运算符-计算当前环境下各类型的字节数
  • 三、整数存储-原码,反码,补码
    • 1、原码
    • 2、反码
    • 3、补码
    • 4、小结
  • 四、总结
  • 五、文末声明

一、实验环境

Windows 10 系统
Visual Studio 2019

二、C语言整数简介

1、类型说明符

类型说明符 字节数 输入输出格式 取值范围
short int 2 %hd - 32768 ~ 32767(5位十进制数)
unsigned short int 2 %hu 0 ~ 65535(5位)
int 4 %d - 2147483648 ~ 2147483647(10位)
unsigned int 4 %u 0 ~ 4294967295(10位)
long int 4 %ld - 2147483648 ~ 2147483647(10位)
unsigned long int 4 %lu 0 ~ 4294967295(10位)
long long int 8 %lld或%I64d - 9223372036854775808 ~ 9223372036854775807(20位)
unsigned long long int 8 %llu或%I64u 0 ~ 18446744073709551615(20位)

这里需要注意,上述字节数是我当前环境下的字节数。C语言中规定:长整型(long int)至少和整型(int)一样长,整型(int)至少和短整型(short int)一样长,即 short int <= int <= long int
编译系统给int型数据分配的内存可能是2个字节或是4个字节,具体由编译系统自行决定。例如:Turbo C 2.0分配的是2个字节,而Visual C++则分配4个字节。1

(1) signed和unsigned

C语言中整数分为有符号类型(signed)和无符号(unsigned)类型。如果没有显示说明为unsigned,则默认为signed。例如:int a即signed int a,long int a即signed long int a。
signed:最高位为符号位,0表示正号,1表示负号。剩下的位数表示数值。
unsigned:没有符号位,所有位数都表示数值。

(2) 省略书写

当int前有signed,unsigned,short,long,long long修饰的时候,int可以省略不写。例如:signed a即signed int a,unsigned a即unsigned int a,unsigned long a即unsigned long int a。

2、sizeof运算符-计算当前环境下各类型的字节数

C语言中sizeof是一个运算符,而不是函数。以字节为单位返回运算对象的大小。运算对象可以是具体的数据对象(如,变量名)或类型。如果运算对象是类型(如,float),则必须用圆括号将其括起来。所以sizeof a,sizeof(a),sizeof(float)都是合法的,其中a是变量名。
sizeof返回size_t类型的值,这是一个无符号整数类型。C头文件系统会使用typedef把size_t作为unsigned int或unsigned long的别名。C99新增%zd转换说明用于printf()显示size_t类型的值,如果编译器不支持%zd,请将其改成%u或%lu。

#include<stdio.h>
int main(void)
{printf("short int = \t%zd\n", sizeof(short int));//其中\t是制表符,\n是回车换行printf("int = \t\t%zd\n", sizeof(int));printf("long int = \t%zd\n", sizeof(long int));printf("long long int = %zd\n", sizeof(long long int));return 0;
}

输出:

short int =     2
int =           4
long int =      4
long long int = 8

三、整数存储-原码,反码,补码

我解释的很简单,建议看这篇:原码、反码、补码知识详细讲解
下面我以单字节有符号整数1和-1为例:

1、原码

+1:0000 0001 —— 最高位0为符号位,表示正数
-1:1000 0001 —— 最高位1为符号位,表示负数

2、反码

正数的反码与原码相同,负数的反码:符号位不变,其他位取反,即0变1,1变0。
+1:0000 0001
-1:1111 1110

3、补码

正数的补码与原码相同,负数的补码:符号位不变,其他位取反后(即反码)加1
+1:0000 0001
-1:1111 1111

4、小结

正数:原码 = 反码 = 补码
负数:原码 ≠ 反码 ≠ 补码
0 表示为 0000 0000。
正数的范围:1 ~ 127:0000 0001 ~ 0111 1111。
负数的范围:-128 ~ -1:1000 0000 ~ 1111 1111

这里存在一个特殊的数-128
在0的表示上出现了特殊情况。数学中没有+0和-0之分,因为0既不是正数也不是负数。现在我们已经将0000 0000表示成为0,那1000 0000怎么办呢?如果某个数的原码是1000 0000,求其补码,符号位不变,剩余位取反加1,出现了溢出,将溢出位省去,得到的还是1000 0000。在计算机的内部表示中,就将1000 0000定义成数字-128。(我记得书上好像说-128不能求原码和反码,就是强行定义的。我不确定啊,疫情期间,书在学校,人在家中,无法求证。)

计算机采用补码表示负数,是为了避免减法,将减法转换成了加法。所以计算机里只有加法器而没有所谓的减法器。

四、总结

  1. C语言中整型分为有符号和无符号两种。各种类型所能表示数的范围有所不同,根据实际情况选取合适的类型。最常用的是int,不过有时需要存储的数超出int的范围,需要考虑long或者long long(我当前环境下long和int的范围是一样的)。
  2. sizeof是运算符而不是函数,返回值类型是size_t,这是一个typedef定义的一个无符号整型的别名。运算对象是类型说明符时,必须加上括号。
  3. 原码、反码、补码,存储负数,消灭减法。

五、文末声明

  1. 我学习参考的是书本和网络,文章旁征博引(这是个好词),对引用的部分我都标上了链接,有些遗漏的或者一两句话没标注的,如果侵权万分抱歉,联系我后必删。

  2. 我写博客旨在监督自己学习,与大家分享学习成果,脚踏实地,一步踩死一个bug。由于本人水平极其有限,文中有出错的地方还请读者批评指正。


  1. C语言中 int、long、long long 的存储空间和值的范围 ↩︎

C语言-整数:short、int、long、long long(signed和unsigned)、原码、反码、补码相关推荐

  1. 【濡白的C语言】数据的存储(大小端模式,原码反码补码,浮点数的存储,浮点型精度缺失的原因)

    前言 很多学习C语言之后就会对各种类型感到很烦,但是数据的类型具有相当的意义.首先是类型决定了大小,即该数据在内存中开辟的空间大小:同时不同的类型还决定了数据存储的方式,相同的数据,存入整形与浮点型方 ...

  2. C语言基础(二)—— 常量与变量、数据类型、进位制、关键字、原码反码补码、限定符、字符串格式化输入输出

    1. 常量与变量 1.1 关键字 1.2 数据类型 数据类型的作用:编译器预算对象(变量)分配的内存空间大小. 1.3 常量 在程序运行过程中,其值不能被改变的量 常量一般出现在表达式或赋值语句中 整 ...

  3. c语言原码 补码 反码,C语言 原码--反码--补码

    //原码,反码,补码 #include #include //数值的表示方法--原码.反码和补码 //原码:最高位为符号位,其余各位为数值本身的绝对值 //反码: //正数:反码与原码相同 //负数: ...

  4. 补码原码转换c语言代码,c/c++原码反码补码原理 以及进制转换

    1首先了解 低字节位 和高字节位 看图 2字节在内存的排列方式//int num = 010; //0开头代表 8禁止 //("%d",num); //所以打印的是8 int nu ...

  5. (原码反码补码的计算)在一个8位的二进制的机器中,补码表示的整数范围是从_(1)_(小)到_(2)_(大)。这两个数在机器中的补码表示为_(3)_(小)到_(4)_(大)。数0的补码为_(5)_。

    https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注! 欢迎关注微信公众号:宝藏女孩的成长日记 如有转载,请注明出处(如不注明,盗者必究) 目录 题目 分析过 ...

  6. c语言中的原码反码补码,c语言中的原码 反码 补码

    陈独秀的秘密 所谓原码就是前面所介绍的二进制定点表示法,即最高位为符号位,"0"表示正,"1"表示负,其余位表示数值的大小. 反码表示法规定:正数的反码与其原码 ...

  7. C语言中八进制和16进制怎么表示,原码,反码及补码,C语言按位取反运算符~

    借鉴被人的 C语言中8进制和16进制怎么表示 C语言本身支持的三种输入是: 1. 十进制.比如20,457: 2. 十六进制,以0x开头.比如0x7a: 3. 八进制,以0开头.比如05,0237 所 ...

  8. int类型在计算机中的储存(原码、补码、反码)

    int类型在计算机中的储存 说起,int类型在计算机中的储存,首先要解释的就是原码.补码.反码这三个概念了.因为计算机内部储存的都是补码. 原码 对于int类型来说,这里我们按照常见的四个字节讲解,四 ...

  9. 计算机中的无符号有几种,【数据结构】整数类型之有符号、无符号数(原码、反码、补码)详解。...

    Fist:why? 有时候只知道什么还不够,我们还需要为什么,所以我在整个数据结构系列中都要追寻这个答案. Q1:为什么需要整型数据. 因为整型数据结构跟生活密切相关,生活中.数学中到处都是整型数字. ...

  10. 用c语言编程求字符的反码,编程达人 《汇编、C语言基础教程》第一章 进制1.5原码、反码与补码(连载)...

    1.5 原码.反码与补码 计算机存储的数据是以补码的形式体现的,所以就要我们掌握原码.反码与补码的概念. 本节必须掌握的知识点: u 计算机中正数.负数的表现形式 u 原码.反码.补码的概念 假设有个 ...

最新文章

  1. asp.net mvc3.0安装失败之终极解决方案
  2. linux adb 点击屏幕,ADB 操作命令(二)
  3. BZOJ 1176([Balkan2007]Mokia-CDQ分治-分治询问)
  4. 文献记录(part58)--不平衡数据处理的新方法一基于样本相似度的少数合成法
  5. 基于函数计算的 Serverless AI 推理
  6. 数字地和模拟地都是地,为什么要分开?
  7. 如何绘制高大上的词云图?
  8. python pca降维_协方差矩阵的计算、PCA
  9. 如何在不确定经济形势下把握好企业脉搏
  10. 实用技术会议通知:我知道你不会来,可是我不说是我的错
  11. python人脸识别代码实现
  12. 面试官:你觉得扫码登录应该怎么实现?
  13. qt中如何模拟按钮点击_qt模拟鼠标单击事件
  14. 构建一个代号为1的聊天应用程序4
  15. 【转帖】计算机编程语言
  16. react-contexify 右键菜单动态生成
  17. 金秋杭州游 只为桂花香
  18. odoo中的消息通知
  19. ThinkPad 连接无线网络几分钟后无线自动关闭
  20. oracle数据库账号被锁

热门文章

  1. 电脑硬件:cpu后边数字及字母的意思
  2. 学生信息管理信息系统--添加窗体(学籍,课程,班级,成绩)问题汇总
  3. 如何手动制作透明的图片相框 可以供android使用
  4. Nginx学习 ---- js胖笔记
  5. hive与impala相关
  6. 【Jquery选择器】
  7. (三)Linux环境部署(Centos+Nginx+Tomcat+Mysql) - Nginx环境搭建
  8. Hadoop安装及部署
  9. MySQL中的升序降序以及字段的升序降序
  10. 微信小程序demo1计算器