我们都知道 程序 = 数据结构 + 算法,而学习数据结构前,一定要把数据类型啃透,负责就可能出现各种段错误或者溢出的错误。而对于初学者来说,学习数据类型的基本知识是容易的,但是有些底层知识与比较偏的知识,我认为也是需要掌握的。

目录

一、c语言的数据类型

1.基本类型

数据在计算机底层的存储

要注意的东西来了

第二个小知识

浮点常量小知识

运算符


一、c语言的数据类型

1.基本类型

C语言为我们定义好的类型,我们直接拿来用。
    主要针对:
    数:整数、浮点
    
    1.1整型
    char/unsigned char : 1byte = 8bits
        char: -128 ~127
        unsigned char: 0 ~ 255
    
    short/unsigned short: 2 bytes
    int/unsigned int: 4 bytes
    long / unsigned long: 8bytess
    
    在ubuntu18.04 【在不同的编译器下,字节长度不一样】
    sizeof(short) = 2;
    sizeof(int) = 4;
    sizeof(long) = 8;
  
    1.2 浮点型

float :单精度浮点数 sizeof(float) = 4
        double:双精度浮点数 sizeof(double) = 8
        long double 长双精度浮点数 sizeof(long double) = 12(>=10)
        
        C语言中,整数默认的类型是int,小数默认的是double类型。
        
        typeof(1) = 4
        typeof(1.0) = 8
    
2.构造类型:自定义的类型
    C语言中,允许我们程序员自定义类型。
    2.1数组
        int a[4];// typeof(a) = int[4]
        
        int b[10];//typeof(b) = int[10]
        
        typeof(a) != typeof(b)
        
        typeof(a[0]) : int
        typeof(b[0]) : int
        所以:typeof(a[0]) = typeof(b[0])

3.void类型
    在c语言中,void出现在三个地方
    (1)void当函数的参数,表示该函数无参。
    int func(void)
    {
    
    }
    (2)void当函数的返回值类型,表示该函数无返回值。
    void func(int a)
    {
        
    }
    
    调用:int m = func(6);
    func(6);
    
    (3)void* 表示一个通用指针,可以指向任何数据类型。

数据在计算机底层的存储

整数在计算机中是如何存放的呢?
        是通过二进制的补码形式存放的。
        补码:正数的补码是其本身                  负数:是其绝对值的原码取反加1

要注意的东西来了

举个栗子:char类型是1字节,范围是 “-128~127”

而 unsigned char类型也是1字节,但范围是“0~255”

那同学们有没有思考过,同一个类型,有符号与无符号的范围这么规定,具体原因是什么呢?

其原因就是正数与负数在计算机中的存储形式了

比如一个1字节,也就是8bit的负数“-1“ 它的存储形式为 “1111 1111”

而一个1字节,8bit的正数“1”,它的存储形式也为“1111 1111”

其规律就是一个n字节的存储类型,他的“-x”与“2^n-x”在计算机里的存储形式是一样的

所以char类型“128~255”分别与unsigned char类型“-128~255”在计算机里的二进制存储形式是一样的,所以有符号与无符号将这两类分开,就不会产生歧义。

在CPU底层是没有符号位概念的,都是数值位,都参与运算,至于这个数是整数还是负数,就得看编译器的词义了,意思是说,你把这个数当做是一个有符号的数,还是一个无符号的数。

第二个小知识

C语言允许不同类型的整型相互赋值

有人提出,长度不一样,如何赋值呢?
        标准C建议如下:
        (1)长 - 》短
            低字节直接拷贝,高字节直接丢弃。
        
        (2)短-》长 
            低字节直接拷贝,高位补什么呢?
                if 短的是有符号数,高位就全部补符号位。
                if 短的是无符号数,高位就补0.

下面说一个快捷计算方法:

1.对一个数的二进制取反<==>这么多位“1”减这个数

如一个数的二进制为“0111 1001”,取反为“1000 0110”,也可以用“1111 1111”减“0111 1001”一样可以得到这个数,二进制下也许看不出这个方法的快捷,但在十进制下就完全不一样了

又比如,我们要对112这个8bit的数取反,正常方法要先转换为二进制再取反,得到去饭店二进制后再转成十进制,但是真的上面这个快捷方法后,我们就能直接计算。我们知道8bit全1为255,所以我们只需要用255-112,就能得出112取反的十进制为143了。怎么样,是不是很简单。

同样,有些计算中,如计算负数的补码:原码取反加1,就可以直接使用上面的方法,取反是2^n-1-x,那取反加一不就是2^n-x吗。

浮点常量小知识

由整数部分,小数点,小数部分组成,一个e/E,一个可以带符号的整型指数和一个表示类型(e/E表示科学计数法,想必大家在计算机上都见过)

而有一个需要注意的地方:字母e/E前面必须有数字;后面必须为整数(正整数、负整数)
        (这是为什么呢?也许你觉得字母e/E前面的1可以省略,但是请联系字符定义,第一位不可以是数字,这样就能规避歧义)

运算符

我们再讲一些运算符的小知识吧

C语言基础犄角旮旯的知识之数据类型相关推荐

  1. [GO语言基础] 三.变量声明、数据类型、标识符及编程练习12题

    作为网络安全初学者,会遇到采用Go语言开发的恶意样本.因此从今天开始从零讲解Golang编程语言,一方面是督促自己不断前行且学习新知识:另一方面是分享与读者,希望大家一起进步.前文介绍了Go的编译运行 ...

  2. C语言基础-部分基础理论知识汇总

    C语言基础-部分理论知识汇总 本文为C语音部分理论知识汇总,主要包含:C语言的特点与程序结构 .基本数据类型.运算符和表达式.基本语句与顺序结构等内容. 本文为个人学习笔记整理,偏向理论知识介绍,具体 ...

  3. 一篇文章带你玩转C语言基础语法。2:数据类型。千字总结

    我的个人主页:☆光之梦☆的博客_CSDN博客-C语言基础语法(超详细)领域博主 欢迎各位

  4. 01 C语言程序设计--01 C语言基础--第3章 基本数据类型01

    01.1.3.1序言 00:02:17 01.1.3.2 C语言中的基本元素和常量的概念 00:08:54 01.1.3.3示例--常量 00:12:08 01.1.3.4变量的概念和命名规则 00: ...

  5. Go 语言基础(三)——基本数据类型

    文章目录 数据类型 整数的各个类型 小数类型/浮点型 字符类型 使用细节 布尔类型 String类型 字符串拼接 数据类型 int unint的大小与系统有关,整形默认声明int Go在使用时遵保小不 ...

  6. C语言基础和语法知识

    在新的学期,我打算学好数据结构和算法,打算好好学习计算机专业课程,考上四六级证. ## 什么是数据类型 在C语言中,不同数据类型在进行运算时首先要转换成同一类型,一种是自动转换,二是强制转换.shor ...

  7. c语言基础(七)---复杂数据类型

    文章目录 一.结构体 1. 定义 2. 声明 二.联合体 1.定义 2.赋值 3.应用 三.枚举 1.枚举的由来 2. 枚举定义 3.枚举变量 4.枚举实例测试 四.宏 1. 宏的理解 2. 常量宏定 ...

  8. [GO语言基础] 四.算术运算、逻辑运算、赋值运算、位运算及编程练习

    作为网络安全初学者,会遇到采用Go语言开发的恶意样本.因此从今天开始从零讲解Golang编程语言,一方面是督促自己不断前行且学习新知识:另一方面是分享与读者,希望大家一起进步.前文介绍了Golang的 ...

  9. [GO语言基础] 五.顺序控制语句和条件控制语句(if、else、switch)

    作为网络安全初学者,会遇到采用Go语言开发的恶意样本.因此从今天开始从零讲解Golang编程语言,一方面是督促自己不断前行且学习新知识:另一方面是分享与读者,希望大家一起进步.前文介绍了Golang的 ...

  10. 语言基础快速预览-Lua

    语言基础快速预览-Lua 数据类型 变量 循环 流程控制 函数 运算符 字符串 数组 迭代器 table Lua模块与包 Lua元表 协同程序 文件I/O 错误处理 面向对象 初阶话题 进阶话题 高阶 ...

最新文章

  1. InstallShield9中开始菜单的设置
  2. “undefined reference to JNI_GetCreatedJavaVM”和“File format not recognized”错误原因分析...
  3. vue 背景透明度_一款媒体小白喜爱的视频编辑软件,vue视频编辑APP,想学就来...
  4. sqlite数据库android使用教程,Android开发教程之 SQLite数据库的使用
  5. [pytorch、学习] - 5.9 含并行连结的网络(GoogLeNet)
  6. 学习笔记--------分布式事务产生的场景
  7. Java EE重新审视设计模式:观察者
  8. lucene api
  9. easyUI 绑定右键菜单在数据行上显示
  10. UCI机器学习数据集
  11. 重置密码解决MySQL for Linux错误 ERROR 1045 (28000):
  12. java中的URLConnection
  13. 什么是职场PUA?遇到以下这五种情况你就得当心了!
  14. 单向链表的python实现
  15. 推荐一本学javascript的书籍---经典
  16. 并发-2-Thread和Runnable的API
  17. DDD中的Specification模式
  18. Module not found: Error: Can‘t resolve ‘vue-router‘ in
  19. android系统测试模式,Framework基础:手机如何进入meta测试模式
  20. Nagios常见问题集锦

热门文章

  1. 实践练习二(必选):手动部署 OceanBase 三副本集群(在同一个节点)
  2. CSS单位:em、rem、%、vh、vw、vmin、vmax
  3. 给div添加蒙版(遮罩?)
  4. Android 自定义动态Drawable实现动态指针时钟功能
  5. 判断App位于前台或者后台的6种方法
  6. 方根法公式_Excel怎么对一个数开n次方根 Excel开方方法汇总
  7. Python Web 框架-Django day06
  8. 公司网站无意使用了”方正字体”,被”索赔
  9. IcedTea6版本1.7.1
  10. 医院时钟系统(子母钟系统)构成及应用