C语言基本类型
程序中不可能离开数据,平时我们将各种数据录入计算机时,就是为了让计算机来处理这些数据。
计算机在处理这些数据首先要对这些数据进行存放再进行处理。计算机内存的最小单位为字节(byte) 还有KB MB….
C语言基本类型
他们之间的关系是1024b=1kb 1024kb=1mb
由于我们存入的数据可能类型不同 计算机存放数据 可以用一个字节来存放。
也可能临时把几个相邻的字节合并来记录一个数字,在内存中用来记录一个数字的区域叫一个存储区(一个或多个字节)内存中每个字节都有在内存中***的编号。
变量
这个编号叫做这个叫做字节的地址(一般以十六进制表示)
我们可以通过这个字节的地址找到对应的字节,C语言足可以便用变量代表一个存储区,这样可以简化对存储区的使用
变量:是可变的 具有存储空间的。
常量:不可变的 具有存储空间的。
计算机可以根据变量找到变量对应的地址,变量在使用之前需要让计算机为它分配一段内存(存储区)。可以用变量的声明让计算机为它分配存储区,变量的声明方法。
标识符命名规则
在声明变量时我们自定义一个变量名在编程时使用变量名函数名等的叫做标识符。
1 第一个字母只能是英文或者下划线
2 后面的字母可以是英文字母,下划线或者阿拉伯数字字符
3 标识符中大小写不同的字符被看作是不同的字符(大小写敏感)
4 关键字不可以当作标识符使用
5 标识符长度没有限制,但是计算机只会截取一段使用(c89规范中截取前31个字符,c99截取前63个字符)
类型名 变量名;Int num;
变量的使用方法:
存储数据一个数据 从变量中获得数据并进行计算。
如果在声明之前未指定变量的值 那么系统会为变量提供一个默认值,变量的赋值语句可以向变量中存放一个数据赋值语句一般由赋值操作符(=)来进行赋值操作,(=)前的数据必须能代表一个存储区(左值)。
1=2; a=b;(=)后的数据必须是能代表一个数字的内容Int num =1;或者 int num;Num=1;
Printf()函数
变量名在程序中可以代表存储区也可以代表存储区的数字(由前后语境决定),变量在使用之前都应该初始化 Printf 是一个标准库函数 。
功能:
把程序中的数据打印在终端窗口里,在使用之前我们需要包含stdio.h头文件。
Printf函数调用语句中使用占位符可以把双引号进而的%X的位置保留下来,输出的内容由后面对应的变量的值决定。不同的占位符需要对应变量相应的数据类型,一个打印语句中可以有多个占位符配合多个不同的类型数据进行使用。
数据类型
在printf函数的“ ”内: 是一个转义符号 (在注释里代表续行符)
‘ ’ 换行
‘ ’ 回车
‘ ’ 制表符(换列)
‘a’ 警报
‘’ 退格
‘’ 反斜杠
C语言的数据类型
C为程序员提供了针对不同用途的多种选择 各种类型的区别在于他们的提供的数值范围以及是否可以取负值四种基本类型:int char float double
有符号: signed unsigned int num 。
无符号: unsigned 。
C 99中新增 long long int unsigned long long int 。
64位系统
这个位数指的是CPU 里面的通用寄存器的数据宽度为64位,也就是说一个地址占二进制位数是64 32位同理 。
ASCII
数据在存储与运算时使用的是二进制表示 当在表示a b *%$这些字母字符时为了统一通信时不出现混乱,美国有关的标准化组织出台了ASCII编码‘0’ 48 ‘A’ 65 ‘a’ 97。
Sizeof关键字
Sizeof 关键字可以用来计算一个变量或数据类型的存储区所占的字节个数
注意
1 小括号里若修改了任何存储区的内容 这种修改不会生效。
2 sizeof 是一个运算符而非函数。
C语言进制知识总结
1.什么是进制
进制是一种计数的方式,常用的有二进制、八进制、十进制、十六进制。任何数据在计算机内存中都是以二进制的形式存放的。
我对进制的个人理解,二进制数是以2为计算单元,满2进1位的数;八进制数是以8为计算单元,满8进1位的数。
对于任何一个数字,我们都可以用不同的进制来表示,比如,十进制数12,用二进制表示为1100,用八进制表示为14,用十六进制表示为0xC。
2.进制的转换规则
遵循满进制值进1位,个位数变为0的原理,下面我们以十进制数18为例,对1-18中每一个数值转换各种进制做一个详细说明
转二进制:
①小于2,无需进1位,1的`二进制值是1
②为二进制值1后面一个数,由于1+1满2,需要进1位,个位数变为0,所以2的二进制值是10
③为二进制值10后面一个数,由于11的个位数1小于2,无需进1位,所以3的二进制值是11
④为二进制值11后面一个数,由于11的个位数1+1满2,需要进1位,而二进制值11的位数1+1又满2,所以位数加1,最终转换结果为100
转换思路:
二进制值11+1 ->10+(1+1)(个位等于2,进1位,个位数变为0) ->(1+1)+0(位数满2,进1位) -> 100
以此类推,最终十进制数18的二进制转换结果是10010
转八进制:
1-7小于8,无需进1位,1-7的八进制由1-7表示
8为八进制值7后面一个数,由于7+1满8,需要进1位,个位数变为0,所以8的八进制值是10
以此类推,最终十进制数18的八进制转换结果是22
转十六进制:
十六进制中,个位数1-15分别为1 2 3 4 5 6 7 8 9 a b c d e f (a=10....f=15)
16为十六进制值c后面1个数,由于c+1满16,需要进1位,个位数变为0,所以16的十六进制是10。
最终十进制数18的十六进制转换结果是12
详细结果如下图所示(C语言把数字前面加0x的数认为是十六进制数)
3.C语言中int类型进制的声明以及占位符
虽然以下3个变量的赋值方式不同,但实际赋值结果都是18
//二进制类型数字加0b
int number1 = 0b10010;
//八进制类型数字加0
int number2 = 022;
//十六进制类型数字加0x
int number3 = 0x12;
八进制占位符:%o
十六进制占位符:%x
4.内存存储数据细节
我们知道,int类型数据占据4个字节,1个字节是8bit。并且任何数据在计算机内存中都是以二进制的形式存放的,所以内存需要用32个0或1来描述1个int类型数据。
由于18的二进制数是10010,我们将一个int类型变量赋值18,本质上是将这个变量的内存地址对应的32个bit位修改为:
0000 0000 0000 0000 0000 0000 0001 0010(未满31位,后面的数字用0填充:为什么是31而不是32呢,后面会介绍)
假设我们定义两个变量
int number1 = 12; int number2 = 13;
计算机会根据内存地址以由大到小的顺序进行分配内存空间,具体如下图所示:
5.进制的转换公式
二进制转十进制
0b1100 ->0*2的0次方 + 0*2的1次方 + 1*2的2次方 + 1*2的3次方 = 12
十进制转二进制
67 ->64+2+1 ->2的6次方+ 2的1次方 + 2的0次方 = 0b1000011
6.进制的其他知识
①.n位二进制能保存的整数范围公式:2的n次方-1
例如,3位的二进制数最大值为111,对应的十进制数字为7;5位的二进制数最大值为11111,对应的十进制数字为(2*2*2*2*2)-1 = 31。
②.负数的二进制保存规则是最左边的数字是1。例如,0000 0000 0000 0000 0000 0000 0001 0010 表示正整数,1111 1111 1111 1111 1111 1111 1110 1101表示负数
由此,我们就能推测出,int类型能保存的最大整数是2的(32-1)次方-1 = 2147483647。为什么要用32-1,很简单,32个bit中,必须抽1个bit位用来描述这个数字是正数还是负数。
本文发布于:2022-12-20 03:11:00,感谢您对本站的认可!
本文链接:http://www.wtabcd.cn/fanwen/fan/89/74525.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |