C语言修炼之路数据类型悟正法 解析存储定风魔上篇

目录
  • (壹) 数据类型介绍
    • 1.1  类型的基本归类
  • (贰)整形在内存中的存储
    • 2.1  原码、反码、补码
    • 2.2  深入解析
    • 举例解析1:
    • 举例解析2

(壹) 数据类型介绍

前面我们已经学习了基本的内置类型,以及他们所占存储空间的大小。:

类型的意义:

  • 使用这个类型开辟内存空间的大小(大小决定了使用范围)。
  • 如何看待内存空间的视角。

1.1  类型的基本归类

整形家族:

浮点数家族:

构造类型:

指针类型

空类型:

(贰)整形在内存中的存储

我们之前讲过一个变量的创建是要在内存中开辟空间的。

空间的大小是根据不同的类型而决定的。

那接下来我们谈谈数据在所开辟内存中到底是如何存储的?

比如:

我们知道为a分配四个字节的空间。 那如何存储?

2.1  原码、反码、补码

计算机中的有符号数(整数)有三种表示方法,即原码、反码和补码。

三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”,而数值位三种表示方法各不相同。

2.2  深入解析

正数的原、反、补码都相同。

对于整形来说:数据存放内存中其实存放的是补码。

为什么呢?

举例解析1:

举例解析2

了解一下计算机的底层概念,我们人脑可以很轻松的知道机器数的第一位是符号位,但对于计算机基础电路设计来说判别第一位是符号位是非常难和复杂的事情,为了让计算机底层设计更加简单,人们开始探索将符号位参与运算,并且采用只保留加法的方法,我们知道减去一个数,等于加上这个数的负数,即:1-1 = 1 + (-1) = 0,这样让计算机运算就更加简单了,并且也让符号位参与到运算中去。

因为补码能多存储一个-128,而且在计算机底层中存储的是补码,所以在计算机中一个8位的二进制数的存储范围是用补码表示的[-128,127],而不是用原码或反码表示的[-127,127]。这也可以解释为什么计算机中一个字节的取值范围是[-128,127]。

这样也能够回答我们开始提出的问题了,原码、反码、补码的使用,是人们为了让符号位能参与运算并让计算机底层运算更加简单而设计出来的数据存储表示方式。

到此这篇关于C语言修炼之路数据类型悟正法 解析存储定风魔上篇的文章就介绍到这了,更多相关C语言 数据类型内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • C语言修炼之路数据类型悟正法 解析存储定风魔下篇

    目录 (壹)大端小端藏端倪 1.1 什么是大端小端 1.2 大端小端模式 1)大端模式: 2)小端模式: 1.3 为什么有大端和小端 1.4 如何判断机器的字节序 (二) 浮点型在内存中的存储 2.1 浮点数在内存中的储存 2.2 题目解释 (壹)大端小端藏端倪 1.1  什么是大端小端 大端(存储)模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中: 小端(存储)模式,是指数据的低位保存在内存的低地址中,而数据的高位,,保存在内存的高地址中. 1.2  大端小端模式

  • C语言实现 数据类型占多少字节指针占多少字节

    具体代码如下所示: #include<stdio.h> void main() { //使用sizeof验证数据类型在内存中占用的空间大小 // char // int // short // long // unsigned int // float // double // long double printf("在64位机器中:\n"); printf(" char类型占%d个字节\n",sizeof(char)); printf(" s

  • C语言数据类型枚举enum全面详解示例教程

    目录 一.枚举类型的定义 二.枚举类型的使用 2.1创建变量 2.2一些优点 总结 一.枚举类型的定义 enum Day//enum Day是一种类型 { Mon,//周一到周日这些叫枚举的可能取值,也叫枚举常量 Tue, Wed, Thur, Fri, Sat, Sun, }; 上述代码定义的enum Day是一种枚举类型,{}中内容是枚举类型的可能取值,也可叫作枚举常量. 这些枚举常量都是有值的,默认从0开始,依次往后递增1,如果你愿意赋值也是可以的. 代码如下: #include<stdi

  • C语言自定义数据类型的结构体、枚举和联合详解

    结构体基础知识 首先结构体的出现是因为我们使用C语言的基本类型无法满足我们的需求,比如我们要描述一本书,就需要书名,作者,价格,出版社等等一系列的属性,无疑C语言的基本数据类型无法解决,所以就出现了最重要的自定义数据类型,结构体. 首先我们创建一个书的结构体类型来认识一下 struct Book { char name[20]; char author[20]; int price; }; 首先是struct是结构体关键字,用来告诉编译器你这里声明的是一个结构体类型而不是其他的东西,然后是Boo

  • C语言入门篇--初识C语言及数据类型

    目录 1. 什么是C语言? 2.第一个C程序&&知识点 2.1 头文件 2.2 main函数 2.3 函数调用 2.4 return 0; 3. 数据类型 3.1 C语言数据类型 3.2 为什么有这么多数据类型? 3.3 各个数据类型的大小 1. 什么是C语言? (1)C语言是面向过程.编译型的编程语言(与C++.Java等面向对象的编程语言有所不同,ps:C与C++是兼容的),经过编译后最终形成可执行程序(即exe,可直接运行). (2)C语言非常经典,一般会在底层开发使用,Linux.

  • C语言关于自定义数据类型之枚举和联合体详解

    目录 前言 枚举 枚举类型的定义 枚举类型的优点 枚举类型的使用 枚举中需要注意的点 联合体 联合体类型的定义 联合体的特点 联合体的使用 联合体存在内存对齐 结语 前言 在C语言的自定义数据类型中,除了我们最为常用的结构体之外,还有两个比较少用的自定义数据类型,分别为枚举和联合体(也可以称为共用体). 今天,我们一起看学习一下相关的知识吧! 枚举 什么是枚举? 顾名思义,就是一一列举,把所有的情况,所有的取值,一一列举出来. 在我们生活中,有不少的东西是可以全部列举出来的. 如一个星期有七天,

  • C语言入门之浅谈数据类型和变量常量

    目录 1.变量的作用域: 2.变量的生命周期: 1.字面常量,如:100,‘v’: 2.define宏定义的标识符常量 3.const修饰的常变量 4.枚举常量 总结 首先我们来罗列一下C语言的基本数据类型(未提及的后续将在关键字专题讲解): 类型名称 所占字节 char(字符型) %c 2 short(短整形) %d 2 int(整形) %d 4 long int(长整形) %ld 4 long long int(长整形) %lld 8 float(单精度浮点型) %f 4 double(双精

  • 详解C语言的基本数据类型

    目录 1.C语言基本数据类型 2.计算机中的单位 3.各数据类型的大小及字取值大小 总结 1.C语言基本数据类型 2.计算机中的单位 3.各数据类型的大小及字取值大小 对于short int .int .long int.long long int,虽然都为整形数据类型,但是在存储像年龄.特定的尺寸及尺寸等数值比较小的整型数据时,没必要用long long int 甚至是int去存储该类数据,因为这样会浪费计算及的存储的内存,但是当需要存储相当大的数据时,就需要用到long longint这样的

  • C语言中的浮点数据类型

    目录 1. 处理带小数的数值 2. 浮点类型 3. 浮点类型的sizeof 1. 处理带小数的数值 我们来讨论一下类似于1.234567,0.00001,这类非整数的数据.我们先试试看,int能不能装这些数据呢? #include <stdio.h> int main() { int a = 1.234567; int b = 0.00001; int c = 365.12345; printf("%d\n", a); printf("%d\n", b)

  • C语言修炼之路数据类型悟正法 解析存储定风魔上篇

    目录 (壹) 数据类型介绍 1.1  类型的基本归类 (贰)整形在内存中的存储 2.1  原码.反码.补码 2.2  深入解析 举例解析1: 举例解析2 (壹) 数据类型介绍 前面我们已经学习了基本的内置类型,以及他们所占存储空间的大小.: 类型的意义: 使用这个类型开辟内存空间的大小(大小决定了使用范围). 如何看待内存空间的视角. 1.1  类型的基本归类 整形家族: 浮点数家族: 构造类型: 指针类型 空类型: (贰)整形在内存中的存储 我们之前讲过一个变量的创建是要在内存中开辟空间的.

  • C语言修炼之路悟彻数组真妙理 巧用下标破万敌下篇

    目录 (壹)冒泡排序 1.1冒泡排序的设计 1.2冒泡排序的步骤 1.3冒泡排序的实现 (贰)数组作为函数参数 2.1冒泡排序函数的错误设计 2.2冒泡排序函数的正确设计 (叁)对数组名的拓展解析 (壹)冒泡排序 1.1冒泡排序的设计 冒泡排序(Bubble Sort)也是一种简单直观的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成.这个算法的名字由来是因为越小的元素会经由交换慢

  • C语言修炼之路灵根孕育源流出 初识C言大道生上篇

    目录 试问C语言为何物 壹 贰 叁 你好世界 巧手独创C世界 创建新项目 创建源文件 main函数 第一个程序 运行代码 初悟数据类型 前置知识 数据概念初识 变量?常量? 本文Gitee仓库地址:文章源代码 试问C语言为何物 壹 C语言是一门通用计算机编程语言,广泛应用于底层开发.C语言的设计目标是提供一种能以简易的方式编译.处理低级存储器.产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言. 贰 尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的

  • C语言修炼之路初识指针阴阳窍 地址还归大道真上篇

    目录 (壹) 敢问指针为何物 1.1 指针的概念 1.2 指针的背后 (贰) 指针和指针类 2.1 指针的类型 2.2 指针类型的意义 2.3 指针的解引用 (壹)  敢问指针为何物 1.1  指针的概念 在计算机科学中,指针(Pointer)是编程语言中的一个对象,利用地址,它的值直接指向(points to)存在电脑存储器中另一个地方的值.由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元.因此,将地址形象化的称为“指针”.意思是通过它能找到以它为地址的内存单元. 那我们就可以这样

  • C语言修炼之路初识指针阴阳窍 地址还归大道真下篇

    目录 (壹) 行经旅途遇猛虎--“野指针” 1.1野指针成因 1.指针未初始化 2.指针越界访问 3. 指针指向的空间释放 1.2 巧法规避野指针 (贰) 指针之运算 2.1 指针+-整数 2.2 指针-指针 课堂小补充 (利用指针-指针实现strlen) (叁) 指针和数组 3.1 数组名 3.2 二级指针 3.3 指针数组 (壹)  行经旅途遇猛虎 -- “野指针” 概念:野指针就是指针指向的位置是不可知的(随机的.不正确的.没有明确限制的)指针变量在定义时如果未初始化,其值是随机的,指针变

  • C语言修炼之路灵根孕育源流出 初识C言大道生下篇

    目录 变量的作用域和生命周期 作用域 生命周期 常量 字面常量 const修饰的常变量 #define定义的标识符常量 枚举常量 字符串 初始字符串 库函数 转义字符 笔试题 注释 注释风格 往期文章:C语言修炼之路灵根孕育源流出 初识C言大道生上篇 变量的作用域和生命周期 作用域 作用域(scope),程序设计概念,通常来说,一段程序代码中所用到的名字并不总是有效可用的,而限定这个名字的可用性的代码范围就是这个名字的作用域. 局部变量的作用域是变量所在的局部范围. 全局变量的作用域是整个工程.

  • C语言修炼之路初识分支句 循环助本心下篇

    目录 前引 (壹)while语句 1.1while的执行流程 1.2while语句中的break和continue 1.2.1 break介绍 1.2.2 continue介绍 (贰)for循环 2.1语法 2.1.1  实际的问题: 2.2执行流程 2.3while和for对比 2.4break和continue 2.5小建议 一道笔试题 (叁)do...while()循环 3.1do语句的语法: 3.2执行流程 3.3do语句的特点 课后小练习 C语言修炼之路初识分支句 循环助本心上篇 前引

  • C语言修炼之路初识分支句 循环助本心上篇

    目录 何为语句 分支语句(选择结构) if语句 多条语句的if结构 悬空else if书写形式的对比 课堂练习 Switch语句 语句项 在switch语句中的break 编程好习惯 default子句 编程好习惯 练习 C语言修炼之路灵根孕育源流出 初识C言大道生下篇 C语言修炼之路灵根孕育源流出 初识C言大道生下篇 C语言修炼之路灵根孕育源流出 初识C言大道生上篇 C语言修炼之路灵根孕育源流出 初识C言大道生上篇 何为语句 C语言中由一个分号;隔开的就是一条语句. printf("hehe&

  • C语言修炼之路函数篇真题训练下

      本文的Gitee地址:文章源代码 第壹题 :字符串逆序(递归实现) 方法一,非递归实现 main主体部分 数组名是首元素的地址 首元素是char类型,对应的传参元素过去就是  char*  类型 采用两个指针不断移动,然后交换两个位置的元素来实现逆序 方法贰,递归实现 大致思路 代码实现 (推荐自己手动模拟一下) void reverse_string(char* str) { int len = strlen(str); char tmp = str[0]; str[0] = str[le

随机推荐