首页 > 其他分享 >关于C语言学习的第二天

关于C语言学习的第二天

时间:2024-08-14 21:28:26浏览次数:12  
标签:字节 符号 二进制 补码 C语言 学习 第二天 变量

今天学习的是C语言,本次接着上次的内容继续开始,主要是说C语言中数据类型的内容,如有疑问可以翻找我上一篇关于C语言的内容。

首先是冯诺依曼机,它规定指令和数据都是存储在内存中的,都是以二进制形式存储的。那为什么是使用二进制呢?因为这在电器元件中易实现,且双稳态元件较多。而二进制的运算比诸如十进制等其他进制数运算简单,只需4条规则即可完成运算,反观像十进制数,其运算则有些繁琐。同时二进制的使用也易实现物理上对数据的存储。

在对正负的表示上二进制数可以分为“有符号数”和“无符号数”,两者间的区别在于怎样解释最高位。对于无符号数其最高位被C编译器解释为数据位;对于有符号数其最高位被C编译器解释为符号位即0为正,1为负。但是如果这样数字“0”就无正无负,那按符号表示还唯一吗?其实负数是以二进制补码形成储存的,这样储存就便于用统一的形成来表示0,也便于将减法运算也转化成为加减运算来处理。

那么什么是补码呢?补码是计算机中最常用的表示方法。对于正数,其补码与其原码相同。对于负数,其补码是其反码加 1。补码的一个重要特性是,任何数的补码加上该数本身,结果总是 0。

数据在程序中通常以压缩十进制,二进制来表示即形成八进制和十六进制,这样在可以节省空间。当我们使二进制转换成八进制数时只需将二进制数“三位一组”便可转换成八进制数。

就如图中所示的这样。而之所以会“三位一组”,其就是因为二进制的三位最高数111等于八进制的最高数7。

同理在二进制转换十六进制上时,使用“四位一组”的方式即可进行转化。

即如此图所示,其原理与二转八一致。

接下来介绍内存,内存就是计算机内的存储部件。它的特点就是速度快可随机访问,但是掉电即失内存的存储单元是一个线性地址表,地址按字节(Byte)进行编址,字节是8个“位”。每个字节都用唯一的一个整数来标识,它的地址是一个十六进制无符号整数,32位二进制变为十六进制就是以“四位一组”的方式变成十六进制数,所以32位相当于8个十六进制位。

在计算机中存储器容量的最小单位是“位”,也称比特,一位只能存储0和1。而计算机无法表示太多数据,所以需要将多个位组合起来,8个位可以表示0-255的整数,即字节,所以字节是最小的、可以寻址的储存单位内存空间通常是用字节数的大小来表示,如:1B=8b、1KB=1024B、1MB=1024KB、1GB=1024MB、1TB=1024GB。但是值得一提的是,硬盘的大小不是按照1024来算的,通常厂家是以1G=1000MB为标准,忽略了里面的24。

对于计算机系统和硬盘本身而言,数据类型的概念是并不存在的。而之所以计算机会引用数据类型是为了更好的组织数据,分成所需内存大小不同的数据,规范数据使用,提高程序的可读性,方便用户的使用。

而这里先只会涉及到基本类型的内容。

C语言数据由常量与变量形成常量就是在程序中不能改变的量。它包含有整型(默认常量是int)、浮点型(默认双精度型double)、字符型(这里的内容需用单引号括起来)以及枚举型;变量是在程序运行中能够改变的量。

对于变量类型需要有所定义,它是由“类型关键字  变量名”组成。(如:int a)。在使用的原则上必须先声明再使用,一个声明可声明若干个类型变量(如int a,b,c),顺序无紧要。声明的同时可以赋值,即变量的初始化,如果最终都不赋值的话,最后未确定的值就是乱码。当然如果使用赋值表达式来进行赋值也可,即变量=表达式。但是要注意左值和右值的类型必须一致,不能出现像定义整数型最后赋值小数的情况。在进行多重赋值的情况下,如变量1=变量2=表达式,需由右向左赋值。

变量的属性是由变量的值(这里有多大空间取决于数据类型)、变量名、变量地址(即起始地址)和变量被分配的内存大小组成的。

变量类型决定了占用空间的内存大小,数据的存储形成,合法的取值范围和可参考的运算种类。不同的类型占用大小不同,整数型中int占4个字节、short int占2个字节、long int占4个字节,无符号要在前面加unsigned修饰后面的int、short、long;浮点型中float占4个字节、double占8个字节、long double占8个字节;字符型char占1个字节。

在编码上,不同类型的数据存储形式不同,字符型以二进制方式存储,字符编译方式取决于计算机系统的字符集,如我们之后会常遇到的ASCII字符集。编码中1个字节是8位,一般只用7位,最高位被用作奇偶校验。奇偶校验是一种校验代码传输正确性的方法。根据被传输的一组二进制代码的数位中"1"的个数是奇数或偶数来进行校验。采用奇数的称为奇校验,反之,称为偶校验。采用何种校验是事先规定好的。通常专门设置一个奇偶校验位,用它使这组代码中"1"的个数为奇数或偶数。若用奇校验,则当接收端收到这组代码时,校验"1"的个数是否为奇数,从而确定传输代码的正确性。

汉字有汉字编码,并且要求兼容ASCII码,并用连续的2个字节表示。需要强调一点的是有符号数和无符号数的取值范围是不同的。而若在向变量赋值赋出超过其范围的数会得到一个奇怪的结果,最后会产生数值溢出。

各数据类型中是有可参与运算的范围的。整数型是加、减、乘、除和求余;浮点型是加、减,乘、除;字符型是加、减(要求是整数),且是对ASCII码的运算。

现在可以稍微涉及一些代码内容。

#include<stdio.h>
/* 以#开头,stdio是标准的输入输出函数,h是头文件,
   意思是编译预处理指令,意在程序中调用标准输入输出函数,
   要将头文件包含进来才能使用 */
main()   
/* main是主函数,任何标准C语言都有一个主函数,
   而且程序是从主函数开始执行,主函数内容是放在{}中的,每行都以";"结尾 */
{
      printf("hello world\n") ;   //printf是输出的意思,\n是换行符
}

最后是C语言常见符号:关键字(保留字)、标识符(由系统预定义的标识符和用户自定义组成)、运算符、分隔符、其他符号以及常量。

以上就是学习C语言的全部内容,如有错误欢迎留言指正。

标签:字节,符号,二进制,补码,C语言,学习,第二天,变量
From: https://blog.csdn.net/Steven__Lian/article/details/141198575

相关文章

  • 【人工智能】深入理解自监督学习中的表征学习与对比学习
     我的主页:2的n次方_1.自监督学习1.1自监督学习的概念自监督学习是一种无需大规模标注数据的学习方法,通过构造代理任务,模型可以从数据本身获取监督信号,从而学习有用的特征表征。1.2自监督学习的背景与重要性在当今大数据时代,数据标注往往成为机器学习应用中的一大......
  • 网络安全学习笔记
    Web介绍Web全称WorldWideWeb,全球广域网,也称为万维网。Web项目分为C/S架构和B/S架构。C/S架构:全称客户端服务端架构,client/server。服务端主要负责加工处理数据,客户端主要用来展示数据。有些数据存在服务端,有些数据存在客户端。B/S架构:是C/S架构的一种,浏览器/服务器架构,br......
  • 三种高效学习方法及资料推荐:提高学习效率的秘诀
    1.费曼学习法(FeynmanTechnique)简介:费曼学习法是一种通过教授他人来巩固自己所学知识的方法。这种方法要求学习者将复杂的概念简化成易于理解的形式,并能够向他人清晰地解释这些概念。如果在解释过程中遇到困难,则返回原点,深入学习直至完全理解。步骤:选择一个概念。假设......
  • 操作系统-进程创建、同步与锁、通信、调度算法-学习笔记
    1.进程的基础概念1.1进程是什么?定义:进程是操作系统管理的一个程序实例。它包含程序代码及其当前活动的状态。每个进程有自己的内存地址空间,拥有独立的栈、堆、全局变量等。操作系统通过进程来分配资源(如CPU时间、内存等)并管理任务的执行。进程vs程序:程序:静态的代......
  • 网络安全自学入门:(超详细)从入门到精通学习路线&规划,学完即可就业
    在当今高度数字化的时代,网络安全已经成为了一个至关重要的领域。随着网络威胁的不断演变和增长,对于专业网络安全人才的需求也在急剧上升。对于那些对网络安全充满热情并且渴望自学成才的人来说,制定一个系统、全面且高效的学习路线和规划是迈向成功的关键第一步。本文将为您精心......
  • 【VCG学习篇之前置】最清晰的VCGLib简介与环境配置(Windows)
    写于2024/08/13目录一、什么是VCG1.背景2.功能3.特性4.应用二、环境配置1.下载VCGLib2.项目创建与属性配置(1)项目创建(2)属性配置(3)错误解决3.样例测试三、文件说明无论在学什么之前,首先要了解你要去探索的东西它的一些特性,用途,把它的骨架画好,再基于这个骨架去逐步完善和修改。本......
  • ES(evolution strategy)进化策略、RL(reinforcement learning)强化学习
    进化策略进化策略可被视为这样一个过程:从个体构成的群体中采样并让其中成功的个体引导未来后代的分布。如图中,一个白色箭头是由黑点中的优胜个体引导。策略作用方式以交叉熵CEM(一种进化算法)为例:算法先随机初始化参数和确定根据参数生成解的规则,根据参数生成N组解并评价每组解......
  • MarkDown学习笔记
    标题字体HELLO,WORLD!HELLO,WORLD!HELLO,WORLD!引用符号为>分割线图片超链接点击跳转列表ABBA表格1.可以直接插入名字性别生日------------------代码public......
  • 按钮(Buttons)-Qt-思维导图-学习笔记
    按钮(Buttons)按钮在Qt中的重要性按钮是Qt中最常用的控件之一通过点击按钮,可以响应事件,实现人机交互效果按钮在嵌入式系统和PC端的界面交互中都是不可或缺的Qt内置的六种按钮部件QPushButton:下压按钮用法示例项目创建与设置项目名称:创建一个名为04_qp......
  • 自建开源学习考试系统-moodle4.02
    注意:本文档是关于在使用PHP7.4的Ubuntu20.04服务器中安装Moodle4.021、安装ubuntu20.04LTS服务器版,记得安装时使用国内源如http://mirrors.aliyun.com/ubuntu安装vimsudoapt-getinstallvim2、安装Apache/MySQL/PHPsudoaptinstallapache2mysql-clientmysq......