01进制转换和变量

计算机内存存储数据的部位有硬盘和内存

硬盘存储的是可见数据,内存存储的是不可见数据

硬盘,内存所存储的数据都是二进制数据

我们使用的计算机室为了实现数据存储,数据运算,数据管理

[1]我们(程序员)必须了解数据是如何存储到计算机中的

[2]我们(程序员)必须了解,我们如何通过代码将数据存储到计算机中,以及如何使用这些数据

[对于人类]我们人类通常对于十进制数据更加熟悉

[对于计算机]计算机通常用二进制来存储数据,因为二进制对于计算机而言比较容易实现

内存存数数据的基本单元是三极管(导通,截止,反向击穿)

计算机中表示数据的方式有 二进制,八进制,十进制,十六进制

二进制:由0和1两种字符组成,前缀为0b,例子:0b1001

八进制:由0~7八种字符组成,前缀为0,例子:0755

[应用:文件权限]

d rwxr-xr-x=d rwx r-x r-x

= 111 101 101

= 7 5 5

=0755

第一组:文件所有者得权限

第二组:文件所有者所在小组的其他成员的权限

第三组:文件所有者的小组之外其他小组的权限

十进制:由0~9十种字符组成

十六进制:由09和AF十六种字符组成,前缀为0x,例子:0x1a,0x799

[应用:颜色表示]

颜色的三原色:红 绿 蓝

#FF0000 —红色

#00FF00 —绿色

#000000 —黑色

#FFFFFF —白色

[注]八进制,十六进制的诞生时为了解决两个问题:

(1)二进制数据本身不是很直观(无法很容易地看懂)

(2)十进制数据转成二进制数据,转换过程必须使用除2法,比较麻烦

1.二进制 转 十进制

0b10010=0 * 2^0 + 1 * 2^1 + 0 * 2^2 + 0 * 2^3 + 1 * 2^4

=1 * 2^1 + 1 * 2^4

=18

[注]二进制数据 从右往左数,依次是 第0,1,2......位

转换方法:二进制数据的每一位数值,乘以2的位数次方,然后全部相加得到十进制结果

2.十进制 转 二进制

18=0b10010

转换方法:除2法,余数从下往上数

3.二进制 转 八进制

0b10010=010 010

= 2 2

=022

转换方法:二进制转八进制,从右往左,每三位一取作为一组,高位不够补0

4.二进制 转 十六进制

0b10010=0001 0010 0b111101=0011 1101

= 1 2 = 3 d

=0x12 =0x3d

转换方法:二进制转十六进制,从右往左,每四位一取作为一组,高位不够补0

二进制数据的三种形态:原码,反码,补码

任何一个数据存储到计算机中,必须分配有固定大小的内存单元

而在计算机中,最小的数据单元为字节

1字节 == 8个二进制位

1.原码

一个二进制数据的原码是由符号位和数值位构成,符号位占一位,其他位就是数值位。符号位在最高位

正数的符号位为0,负数的符号位为1

在确定字节数的情况下,最高位作为符号位,其他位用来表示数值的绝对值大小

例:1字节3的原码 0000 0011

1字节-3的原码 1000 0011

[结论] 二进制的原码无法正确运算,计算机不会采用原码来计算数据

2.反码

在确定字节数的情况下,正数的反码和原码一样;

​ 负数的反码,符号位不变,其他位取反(1变0,0变1)

例:0000 0011 1字节3的反码

1111 1100 1字节-3的反码

[结论] 二进制的反码无法正确运算,计算机不会采用反码来计算数据

3.补码

正数的补码和原码、反码一样,负数的补码是 反码加1

例:0000 0011 1字节的3的补码

1111 1101 1字节的-3的补码

[注]对补码再求一次补码得到原码

计算机中是以二进制的形式存储、计算数据的

[结论]计算机是以二进制的补码形式存储、计算数据的,因为补码可以正确运算

4.总结

八进制数据前缀为0

十六进制数据前缀为0x

二进制数据前缀为0b

打印二进制数据,没有特定的打印格式!!!

打印八进制数据,用%o

打印十进制数据,用%d

打印十六进制数据,用%x

程序中存在多种数据,但是数据总体上讲可以分为两种:常量数据 和 变量数据

C语言中的基本数据类型有三类:整型,字符型,浮点型(实型)

整型:关键字为 int,short,long

[注] 使用整型的关键字可以定义整型变量,用来存储整数

字符型:关键字为 char

[注] 使用字符型的关键字可以定义字符型变量,用来存储字符常量

浮点型:关键字为 float,double

[注] 使用浮点型的关键字可以定义浮点型变量,用来存储带小数点的数

标识符的命名规则:

<1>必须由数字,字母,下划线中的一种,或多种组成.

<2>不能以数字开头.

<3>不能和系统预定义的关键字重复

正确表示的标识符可以用来给变量,函数,指针变量,结构体等等命名.

[整型] int,short,long

1.整型变量的定义

int i;//在程序运行时,会向计算机申请4个字节内存单元,这个内存单元的名字就用i表示,使用i就   如果使用分配的4字节内存单元.
short s;//会向计算机申请2个字节内存单元.
long l;//会向计算机申请8个字节内存单元.
//使用sizeof(xxx)  可以测得某个变量所占内存空间大小
printf("%ld\n",sizeof(i));
printf("%ld\n",sizeof(s));
printf("%ld\n",sizeof(l))

2.整型变量的初始化

//初始化,指的是在变量定义的同时通过赋值号给变量赋一个初始值.
// = , 赋值号
int i5 = 100;

3.整型变量的赋值

//赋值,指的是在变量定义之后,给变量赋一个新值.
//后赋的值 会覆盖掉之前存的值.
i5 = 200; 

4.整型变量的输入/输出

类型 输入格式 输出格式
int %d %d
short %hd %hd
long %ld %ld

[注] 数据输入使用scanf语句

数据输出使用printf语句

//可以通过scanf语句给变量i赋值,赋的值是通过键盘输入的.

scanf("%d",&i);//& 是取地址符,可以取得变量的地址(内存中的地址)

整型变量的数据表示范围:

在程序中使用int,short,long所定义的变量默认是有符号类型的变量

有符号整型变量数据表示范围是根据变量所占内存大小而定的

基本整型(int) -2^31 ~ 2^31-1 -21亿 ~ 21亿

短整型(short) -2^15 ~ 2^15-1

长整型(long) -2^63 ~ 2^63-1

0111 1111 ~~ 1111 1111 == 2^31-1

1000 0000 ~~ 0000 0000 == -2^31

1111 1111 ~~ 1111 1111 == -1

如果需要在程序中定义无符号整型变量,需要在int等关键字前加unsigned

unsigned int i;

无符号 基本整型(unsigned int) 0~2^32-1

无符号 短整型(unsigned short) 0~2^16-1

无符号 长整型(unsigned long) 0~2^64-1

字符变量

定义字符变量使用char

定义无符号字符变量使用 unsigned char

定义字符变量是用来存储字符数据的,例如‘a’‘9’‘+’

1.定义一个字符变量

//定义(有符号)字符变量使用 char
char c;//刚定义出来的字符变量,如果不初始化,值无法确定
//字符变量 占 1字节内存
printf("%ld\n",sizeof(c));
//有符号字符变量存储数据范围:-2^7 ~ 2^7-1
//无符号字符变量存储数据范围:0 ~ 255

2.字符变量的初始化

char c1='a';
char c2='+';

3.字符数据的输入/输出

输入:

scanf(“%c”,&c);

输出:

printf(“%c\n”,c);

浮点型变量

定义浮点型变量可以使用的关键字有:float,double

浮点型变量 用来存储带小数点的数

1.浮点型变量的定义

//float,double
//float 定义的变量,称为“单精度浮点型”变量,可以存储小数点后6-8位
//double 定义的变量,称为“双精度浮点型”变量,可以存储小数点后13-15位
float f;//定义float类型变量,变量f会占用4字节内存空间
double d;//定义double类型变量,变量d会占用8字节内存空间
printf("%ld\n",sizeof(f));
printf("%ld\n",sizeof(d)); 

2.浮点型变量的初始化

float f1=3.14f;
double d1=6.28;
//打印浮点型变量的值
//输单精度浮点型数据,用%f
//输出双精度浮点型数据,用%lf
//%f,%lf,默认输出的数据都保留小数点后6位
printf("%f\n",f1);
printf("%lf\n",d1); 

3.浮点型变量的赋值

//后赋的值,会覆盖之前的值
f1=6.28f;
printf("%f\n",f1);
//我们可以通过 %m.nf 控制输出格式
//m ,数据所占总字符宽度
//n,小数点后保留n位
f1=3.14f;
printf("%.2f\n",f1);

内存大小

类型 内存大小(32) 内存大小(64)
int 4 4
short 2 2
long 4 8
char 1 1
float 4 4
double 8 8

数据输入/输出格式

类型 输入/输出格式
int %d
short %hd
long %ld
char %c
float %f
double %lf
unsigned int %u
unsigned short %hu
unsigned long %lu

不同进制数据—输入/输出格式

进制 格式
八进制 %o
十进制 %d
十六进制 %x

​ [注] %i,可以用来输出各种进制的数据

输入scanf的工作原理

程序开始执行后,会在scanf语句处停下来,等待用户输入数据,一旦用户输入了数据,不管输入了多少数据、什么类型的数据,通通会在用户按下回车键时被写入到[输入缓冲区],然后scanf才从[输入缓冲区]中去取对应格式的数据

如果当scanf语句从[输入缓冲区]中取数据时,如果有scanf语句想要的特定格式的数据,直接读走数据,就不会等待用户输入

只有在[输入缓冲区]中没有数据,没有特定格式的数据,才会等待用户输入

[结论] scanf读取数据时,是首先从[输入缓冲区]中取数据的

清除[输入缓冲区]中的所有字符:

scanf("%*[^\n]");
scanf("%*c"); 

输出printf的工作原理

当程序执行到printf语句时,会把需要输出的字符串挨个写入到[输出缓冲区],当遇到[输出缓冲区]刷新条件时,才会把[输出缓冲区]中的数据显示到终端输出

缓冲区刷新的条件

<1> \n

<2> 程序结束

<3> 手动刷新 fflush(stdout)

<4> 当缓冲区满 4096字节(4K)

1字节==8二进制位

1024字节==1KB

1024KB==1MB

1024MB==1GB

1024GB==1TB

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,319评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,801评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,567评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,156评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,019评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,090评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,500评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,192评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,474评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,566评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,338评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,212评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,572评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,890评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,169评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,478评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,661评论 2 335

推荐阅读更多精彩内容

  • 1、标识符 什么事标识符呢?变量的名字就是标识符。不仅限于变量名,程序中各种元素的名字,都属于标识符。例如符号常量...
    滕王阁序阅读 862评论 0 0
  • 网站乱码问题我们会经常碰到,大多见于非英文的中文字符或其他字符乱码,而且,这类问题常常是因为编码方式问题,主要原因...
    波段顶底阅读 2,776评论 1 9
  • 列车,奔驰 在回乡的路上 无暇顾及 窗外诱人的风景 一颗归心,在鸣笛声中 迸出了更快的频率 恍惚中,在山一隅 依稀...
    一叶微岚阅读 589评论 5 19
  • 秋风伴雨凉, 惆怅夜悠长。 不是春江水, 陈茶欠妙香。
    Z0001阅读 220评论 2 7
  • 突然沉静下来的空气,真的很不习惯。 这些天,耳旁的叽叽喳喳、吵吵闹闹虽然总让我心烦意乱,但那算是最贴心的陪伴吧。 ...
    向暖姑娘阅读 352评论 0 0