c语言变量加常量,C语言(二)---常量与变量(示例代码)

一、进制

1.1 二进制

1.1 简介

二进制数据是用0和1两个数码来表示的数。它的基数是2,进位规则是“逢二进1”,借位规则是“借一当二”。当前的计算机系统使用的基本上是二进制系统。

1.2 二进制数据表示法

二进制没有2只有0和1,逢2进1,其权的大小顺序为22、21、2o。例如:

二进制数据0001代表十进制的1,二进制数据0010代表十进制的2,

二进制数据0011代表十进制的3,二进制数据0100代表十进制的4,

二进制数据0101代表十进制的5,二进制数据0110代表十进制的6,

二进制数据1000代表十进制的8,二进制数据1001代表十进制的9,

二进制数据1010代表十进制的10,二进制数据1011代表十进制的11,

二进制数据1101代表十进制的13,二进制数据1111代表十进制的15。

1.3 二进制数据的特点

在一个二进制数字的尾部每次多加一个0代表这个数字乘以2,就如同十进制的尾部每次多加一个0代表乘以10。例如:

二进制数据0001代表十进制的1,二进制数据0010代表十进制的2,

二进制数据0100代表十进制的4,二进制数据1000代表十进制的8,

2的常见倍数:1 2 4 8 16 32 64 128 256 512 1024 2048 4096

1.2 十六进制

英文名称:hexadecimal ,是计算机中数据的一种表示方法。同我们日常中的十进制表示法不一样。它由0-9,A-F组成,字母不区分大小写。

与10进制的对应关系是:0-9对应0-9;A-F对应10-15;N进制的数可以用0---(N-1)的数表示超过9的用字母A-F。二进制只有0和1没有2,十进制只有0-9的数字没有10,十六进制只有0-F,也就是0到15的数字没有16。

在一个十六进制数字的尾部每次多加一个0代表这个数字乘以16,就如同十进制的尾部每次多加一个0代表乘以10。例如:

十进制的32表示成十六进制就是:20

十六进制的20代表十进制的:2×161+0×16o=32

十六进制的A5代表十进制的:10×161+5=165

十六进制的100代表十进制的:16×16=256

十六进制的23F代表十进制的:2×16×16+3×16+15=575

1.3 进制的转换

10进制转2进制:让个位对2取余数得出是1还是0,对其他位除以对应的2的倍数

二、常量

C语言的常量包括:整数常量、浮点数常量、字符常量和字符串常量。

2.1 整数常量的表示方法

十进制表达式,和普通数字的表达方法一致。例如:13,28,-52,-1000等等

十六进制表达式,以0x开头。例如:0xA1,0xC8,-0x20,-0x500等等

八进制表达式,以0开头。例如:032,-011

注意:0开头的常量看上去好像是十进制,其实不是了,已经是八进制了,八进制中只有0-7之间的数字,8和9都错误代码。

注意:C语言并没有提供二进制常量表达式。

2.2 浮点数常量

浮点数常量,通俗地说就是带小数点的数字,表达式的中必须含有小数点,即使小数部分是0也要缺省带小数点。

主要有两种表达式:

单精度浮点数:尾部带f的浮点数代表是单精度浮点数。例如:0.5f,88.2f,-55.0f等等。

双精度浮点数:尾部不带f的浮点数代表是双精度浮点数。例如:0.88,99.5,-111.356等等。

一般认为双精度浮点数比单精度浮点数表达的范围要大很多,包括整数部分和小数部分,双精度表达的数字长度要大很多。

2.3 字符常量

字符常量是用单引号将一个字符括起来的构成,每种被括起来不同的字符代表一个不同的数字(就如同每个学生有不同的名字,而且还有个不同的学号一样)。

所有字符与数值的对照表就是ASCII编码表,作为字符常量使用的ASCII编码主要是使用0-127范围内的数字。其中0~31及127(共33个)是控制字符或通信专用字符,其余为可显示字符。

例如:char c = ‘A’;

‘A’代表的是一个数字65,因为在ASCII编码表中A的数值是65,依此类推:

‘ B’代表66,‘a’代表97,

‘X’代表88,‘5’代表53,

‘=’代表61,‘|’代表124,

’ ’空格代表32等等。

因此,字符常量实际上也是一种整数常量,只不过字符常量所表达的范围比较小而已。

所有的ASCII码都可以用“\”加数字(2位的16进制数字或3位的8进制数字)来表示。

在C语言中常用些字母前加“\”,来表示常见的那些不能显示的ASCII字符,这样的字符就叫做转义字符。例如:char c = ‘\n’;其中‘\n’代表10,被打印输出时代表换行“new line”。依此类推:‘t’代表9,被打印输出时代表间隔一个TAB距离“Table”。

‘\0’代表0,打印输出时代表字符串结尾。

‘\\’代表92,打印输出时是一条反斜杠。

注意在C语言中要打印一条反斜杠,在字符常量中必须使用‘\\’来表示。

‘\”’代表34,打印输出时代表是一个双引号。

char c=‘\x25’; 代表37打印输出的是% ,Char c=‘\053’; 代表43打印输出的是+。

2.4 字符串常量

字符串常量是一对双引号括起来的字符集合。

例如,下面的是合法的字符串常量:"how do you do.","CHINA","a","$123.45",

存储:字符串中的字符依次存储在内存中一块连续的区域内,并且把空字符‘ \0’自动附加到字符串的尾部作为字符串的结束标志。故字符个数为n的字符串在内存中应占(n+1)个字节。

使用printf可以输出字符串,例如:printf("how do you do.");

与字符常量的比较:

字符常量是由一对单引号括起来的单个字符;而字符串常量是一对双引号括起来的字符集合。

字符常量本质上是一个数字,这个数字对应了一个字符;而字符串常量本质上是一个字符集合的内存地址,打印时从头部遍历直到结尾符结束。

不能将字符串与字符常量混淆。字符常量可以赋值给字符变量,但不能把一个字符串常量赋给一个字符变量,同时也不能对字符串常量赋值!例如:char b=‘a’;(正确) char b= “a”;(错误)

三、变量

3.1 字节的概念

计算机中将字节(Byte)作为计量存储容量和传输容量的一种计量单位,一个字节等于8位二进制数。在内存中个位的空间可以存储的数值只有0和1两种,两个位可以存储的数值可能是00、01、10和11。这四个数值分别代表的就是0、1、2、3。依此类推,如果有4个位的空间可以存储的数字就是:0-15(0x0到0xF)。

b57f820f1fb46ab7be720dd6e1bd7f8f.png

由此可见,内存空间上N个位可以存储的数值就是2的N次方个。

一个字节代表8个位的内存空间,可以存储的数值就是2的8次方个,即0到255之间的数值,十六进制表达是0x00到0xFF之间的数值

3.2 变量的分类

C语言变量,是指一段用于存取数据的内存空间。

根据当个变量的空间长短可分为:

字符型变量(1个字节):char类型、unsigned char类型;

短型变量(2个字节):short类型、unsigned short类型;

长型变量(4个字节):int、unsigned int(或long、unsigned long)或float类型以及指针变量等。

超长型变量( 8个字节):double类型、__int64等。

根据类型可以分为:

整数型变量:包括char、 unsigned char、short、 unsigned short、int、 unsigned int(或long、unsigned long )以及 __int64等。

浮点数型变量:float类型(单精度)、double类型(双精度);

其他变量类型还有:指针变量:数组变量以及结构体对象等;

3.3 变量的存储范围

从上表看出4个位表达的刚好是十六进制数字的个位数,如果再加4个位8位刚好表达的就是十六进制的两位数。因此计算机以8个位代表一个字节,表达的数字是(0-255)0x00到0xFF之间的数字总共256个,就像十进制中的两位数是0到99总共100个那样。

3.3.1 单字节变量(8位)

单字节变量(8位): unsigned char和char

4a779e21a82bc06b4850d09526b537c9.png

unsigned char:无符号单字节变量,存储范围是0-255(0xFF)。

char:有符号单字节变量,存储范围是-128到0到127之间的数。

为了让char类型存储的256种数字中,一半是正数一半是负数,计算机将char类型变量中的最高位作为符号位。最高位为0的是正数,最高位为1是负数。

在负数区间,将unsigned char的数值减去256就是char类型。

056346e63792c3fd9315420f08f85673.png

c29d47f71b3645888ba4b2de162d03fc.png

3.3.2 双字节变量(16位)unsigned short和short

330c4e5ef59e597efd8ddb29fc629a9d.png

unsigned short:无符号双字节变量,存储的范围是0-65535(0xFFFF) 总共65536个,就像十进制中的4位数是0到9999总共10000个那样

short :有符号双字节变量,存储范围是-32768到0到32767。

为了让short类型存储的65536种数字中,一半是正数一半是负数,计算机将short类型变量中的最高位作为符号位。最高位为0的代表正数,最高位为1代表负数。

在负数区间,将unsigned short的数值减去65536就是short类型的数值。

513d631865d995c4d68d996c1100c64e.png

838f038d6dddd99535900d5ada2d40f9.png

3.3.3 四字节变量(32位): unsigned int和int(或unsigned long和long)

unsigned int:无符号四字节变量,存储的范围是0-4294967295(0xFFFFFFFF) 总共4294967296个,就像十进制中的8位数是0到99999999总共100000000个那样

int:有符号四字节变量,存储范围是-2147483648到0到2147483647。

在计算机中:1K=1024,1M=1024K,1G=1024M。

65536刚好被1024整除等于64,因此65536也称为64K,32768称为32K; 4294967296刚好被3个1024整除,因此也称为4G,2147483648称为2G。

为了让int类型存储的4G种数字中,一半是正数一半是负数,计算机将int类型变量中的最高位作为符号位。最高位为0的代表正数,最高位为1代表负数。

在负数区间,将unsigned int的数值减去4G就是int类型的数值。

b95a484d5c224b663c95b530fd4d9090.png

3.3.4 其他类型变量

指针变量:在32位操作系统中也是32位的,存储范围是0-0xFFFFFFFF之间。

浮点数类型:浮点数变量的存储结构与整型变量的存储结构完全不同。

float类型小数部分最多可以精确到6到7位,整数位数增长会占用小数部分。

double 类型的小数部分至少要能精确到小数点后 10 位以上,整数位数增长会影响到小数部分的精确度。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/467331.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用CodeSmith要注意的几点

新的项目即将开始了,项目经理老蔡说上次项目的持久层框架不太适合B/S项目,原因是反射用得太多了,并且数据层内部自己又封装了好几层,所以决定从新设计一个执行效率更高的框架。 老蔡设计了下他构思好的持久层和数据层的接口&am…

Alsa里面恶心的DAPM

相关文章音频系统,Alsa 里面的buff 是怎么计算的?为什么需要超过48k的采样音频?我在MTK平台下调试音频ALSA音频几个重要的参数openwrt 音频开发(干货)Ai音箱和Linux音频驱动小谈Android 音频数据流分析之程序员干架产品经理正文做音频的很多初…

从Linus Torvalds一封发飙的电邮开始谈设备树究竟是棵什么树?

[导读] 新版的U-Boot以及内核都引入了设备树,那么这究竟是棵什么样的树呢?长啥样?有啥用?为啥弄个这样的树?本文基于对设备树标准的理解,来学习整理一下相关的要点,供大家参考。Linux为啥要设备…

html两个div间有白线,html-在特定浏览器宽度下,白线出现在渐变填充div的末尾

我有一个ID为#gradient_div的div,其背景图像设置为线性渐变.仅在某些浏览器窗口宽度下,线性渐变的末尾与div #gradient_div的末尾之间才出现缝隙.当我拉伸和收缩浏览器窗口时,这条白线消失并重新出现.似乎与边距有关:>当我将边距设置为margin:0 1&…

为什么读书了,还不如那些初中毕业的同学

今天群里特别热闹,大家聊了很多,我在旁边看着,很舒服,可能也有人跟我一样,看着这些B神吹牛。像读书时候的卧谈会,大家都聊的很嗨,听的人更嗨,我就是那个喜欢听大家吹牛的人&#xff…

为什么说卷积神经网络,是深度学习算法应用最成功的领域之一?

目前,作为深度学习的代表算法之一,卷积神经网络(Convolutional Neural Networks,CNN)在计算机视觉、分类等领域上,都取得了当前最好的效果。后来,基于深度神经网络和搜索树的智能机器人“AlphaG…

C语言博客作业--函数

C语言博客作业--函数 一&#xff0c;PTA实验作业 6-2 简单实现x的n次方 1.本题PTA提交列表 2.设计思路 double mypow( double x, int n )函数&#xff08;1&#xff09;定义y1&#xff0c;i用于循环变量&#xff08;2&#xff09;for(i1;i<n;i){ yy*x}用循环实现x的n次方&am…

Linux系统编程 / triggerhappy 源码分析(3.select 的应用)

哈喽&#xff0c;我是老吴&#xff0c;继续记录我的学习心得。一、进步的滞后性我们期望进步是线性&#xff1a;每一个人付出一些努力后&#xff0c;都希望它有立竿见影的效果。现实是&#xff1a;做出努力后&#xff0c;结果的显现往往滞后。只有在几个月或几年后&#xff0c;…

今天,给我妈打电话聊了我爸

晚上&#xff0c;给我妈打电话&#xff0c;我爸前两天病了&#xff0c;前几年的大病虽然慢慢康复&#xff0c;但是因为年纪大了&#xff0c;身体机能也慢慢变弱&#xff0c;总是有一些大大小小的问题。前两天我发消息给我爸&#xff0c;我说我们要进新房子了&#xff0c;虽然房…

A Simple Note on P4FPGA: A Rapid Prototyping Framework for P4

论文&#xff1a;P4FPGA: A Rapid Prototyping Framework for P4 Github&#xff1a;https://github.com/p4fpga Reference: Han Wang, Robert Soule ́, Huynh Tu Dang, Ki Suh Lee, Vishal Shrivastav, Nate Foster, and Hakim Weatherspoon. 2017. P4FPGA : A Rapid Prototy…

客户端回调

Client Callback 是ASP.NET 2.0新增的一个特性。简单的说&#xff0c;就是在不刷新页面的情况下&#xff0c;用javascript向服务器端传递参数、调用服务器端的方法、并且得到服务器端的返回值进行处理。 1> Why Client Callback HTTP是无状态的协议。在HTTP协议之上开发的…

万事开头难 - 介绍IMX6ULL启动方式

不同开发板&#xff0c;启动方式不一样&#xff0c;今天我们来介绍imx6ull开发板的启动方式&#xff0c;这非常重要。若不了解清楚启动方式&#xff0c;后面的所有开发工作便无从谈起。本文摘自100ask_imx6ull 开发板 配套学习手册-《嵌入式Linux应用开发完全手册_韦东山全系列…

可以在中断服务程序执行malloc吗?

这是微信群里面的一个群友提的问题&#xff0c;原问题如下&#xff1a;今天遇到一个面试问题 请教各位老哥 中断服务程序能否malloc &#xff1f;为什么&#xff1f;我回答是 不行 因为中断服务程序应该要尽量简短&#xff0c;且执行完中断服务程序会跳出中断函数&#xff0c…

Android Input 子系统初探

Android系统基于Linux内核实现&#xff0c;内核作为整个操作系统的核心&#xff0c;对下&#xff0c;它负责整个硬件的驱动、实现对硬件器件的控制管理&#xff1b;对上&#xff0c;它提供各种系统所需的核心功能。Android系统支持的输入设备较多&#xff0c;如按键、触摸屏、手…

计算机excl知识题,2019职称计算机考试Excel模拟题及答案(1.18)

【导语】2019年职称计算机考试备考正在进行中&#xff0c;为了方便考生及时有效的备考&#xff0c;那么&#xff0c;无忧考网为您精心整理了2019职称计算机考试Excel模拟题及答案(1.18)&#xff0c;把握机会抓紧练习吧。如想获取更多职称计算机考试的模拟题及备考资料&#xff…

CPU中的程序是怎么运行起来的

总述最近一位朋友问我&#xff0c;开发的代码是怎么在芯片运行起来的&#xff0c;我就开始给他介绍代码的预编译、汇编、编译、链接然后到一般的文件属性&#xff0c;再到代码运行。但是大佬问了我一句&#xff0c;CPU到底是怎么执行到每一个逻辑的&#xff0c;就讲了哈CPU的架…

Git-远程操作

远程分支&#xff1a;远程跟踪分支remote branch是对远程分支状态的引用&#xff0c;是不能移动的&#xff0c;它会根据远程分支变化以及网络通信自动移动。Git服务器包含了远程分支master&#xff0c;在My Computer中的remote branch就是远程跟踪分支&#xff0c;是对git服务器…

对于鸿蒙的一点见解

周五我在东莞出差&#xff0c;下班后看了开发者大会的视频回放&#xff0c;回到酒店&#xff0c;我跟邓总说&#xff0c;我们今天不要拍视频&#xff0c;也不要打王者了&#xff0c;你给我下鸿蒙的代码来看看&#xff0c;然后&#xff0c;那天晚上我们都没有上线王者&#xff0…

Linux内存管理slub分配器

背景Kernel版本&#xff1a;4.14ARM64处理器&#xff0c;Contex-A53&#xff0c;双核使用工具&#xff1a;Source Insight 3.5&#xff0c; Visio1. 概述之前的文章分析的都是基于页面的内存分配&#xff0c;而小块内存的分配和管理是通过块分配器来实现的。目前内核中&#xf…

逆向知识第十讲,循环在汇编中的表现形式,以及代码还原

逆向知识第十讲,循环在汇编中的表现形式,以及代码还原 一丶do While在汇编中的表现形式 1.1高级代码: #include "stdafx.h"int main(int argc, char* argv[]) {int nSum 0;int i 0;do {nSum nSum i;} while (i <100);return 0; } 高级代码很简单,只是一个简单…