c语言 字母 八进制表示'/1011',C语言学习-进制转换、变量

虽然我是计算机专业毕业的,也学过C语言,之前去网上也自学了一下C语言和OC语言,但是为了把基础打好,我把自己当成一个新人,重新把这C语言和OC语言学好。好的不说这些了,进入正题,不然大家都要说我跑偏了。。。哈哈!

今天主要学习了进制和进制之间的转换、简单程序的一般形式、基础数据类型、常量、变量、运算符、表达式、printf、scanf函数。

一、进制

大家在平时当时,是用十进制来计数的,如“十”,我们可以用10来表示,其实这就是一种十进制的计数方式。编程中有4种计数方式:十进制、二进制、八进制、十六进制。

十进制

十进制是我们最熟悉、最常用的一种计数方式,它有两个特点:由0、1、2….9十个基本数字组成;运算规则是“逢十进一”。

所谓“逢十进一”,似乎在小学数学中都已经学过了,也就是当数值满十时,就要向前进一位

6206fd91ce179ee0771b1aa5ee08884a.png

个位数为9+1,满十了,十位数就进一。

二进制

计算机当中常用的计数方式,由0,1二个数字组成,"逢二进一”。

常以0b开头,是为了和十进制区分。如:0b1010

1 + 1 =

9cb96dddb14008d2bdc24c72daeb7a0d.png

二进制转十进制:按位权求和

0b1011 = 1 * 20 + 1 * 21 + 0 * 22 + 1 * 23 = 1 * 1 + 1 * 2 + 0 * 4 + 1 * 8 = 1 + 2 + 0 + 8 = 11

因此二进制数0b1011表示的数值是十进制中的11

八进制

八进制有两个特点:由0~7八个基本数字组成;运算规则是“逢八进一”。

常以0开头,如:056,而56是十进制数。

八进制转十进制:按位权求和

八进制的基数是8,因此027计算出来就是十进制中的23

027 = 7 * 80 + 2 * 81 = 7 * 1 + 2 * 8 = 23

八进制转为二进制:

不难发现一个十进制数可以表示的最大值是9,而一个八进制数可以表示的最大值是7,恰好3个二进制数可以表示的最大值0b111也是7。因此,我们可以用一个八进制数来代替3个二进制数。

0b11110011 = 0b 011  110  011  = 0363

如果是八进制转为二进制,那就反过来,用3位二进制数来表示1位八进制数

025 = 0b 010  101 =0b10101

十六进制

由1、2、3、4、5、6、7、8、9、A、B、C、D、E、F组成,A~F代表10~15,“逢十六进一"。

常以0x或者0X开头。0x75是个十六进制数,而75是个十进制数。

b944b6d99d7b0aa055e6bde226a4f102.png

个位数是B+5,也就是11+5,值满十六了,于是十位数要进一。因此,在十六进制中,B + 5 = 0x10。0x10则表示十进制中的“十六”,而不是“十”

//十六进制转十进制

十六进制的基数是16,F表示十进制中的15,因此0x2F计算出来就是十进制中的47

0x2F = 15 * 160 + 2 * 161 = 15 * 1 + 2 * 16 = 47

一个十六进制数可以表示的最大值是15,恰好4个二进制数可以表示的最大值0b1111也是15。因此,我们可以用一个十六进制数来代替4个二进制数。

0b11110011 = 0b 1111  0011  = 0xF3

如果是十六进制转为二进制,那就反过来,用4位二进制数来表示1位十六进制数

0x25 = 0b 0010  0101=0b100101

进制总结:

N进制转十进制:按位权求和;

十进制转N进制:边除倒取余;

二、常量、变量和进制

常量: 在C语言中,常量大致可以分为以下类型:整型常量(int)、浮点型常量(float/double)、字符型常量(char)、字符串常量。

1.整形常量:就是int型的数据,如2,3,54,2456,-19,329等等

2.浮点型常量:分为float型和double型。

2.1:float型,就是单精度浮点型,也是小数,比double型的精度低,没有double型表示的小数位数多,常以f结尾,比如5.4f,7.89f.

2.2:double型,就是双精度浮点型 ,其实也是小数,如5.43,58.79,789.3等。

3.字符型常量:将一个数字(0~9)、英文字母(a~z、A~Z)或者 其他符号(+、-、!、?等)用单引号括起来,这样构成的就是字符常,

如'6'、'a'、'F'、'+'、'$'等。

注意:单引号只能括住1个字符,而且不能是中文字符,下面的写法是错误的:'abc'、'123456'、'男'

4.字符串常量:一个字符或多个字符用双引号括起来的,这就是字符串常量。如:"6","abce","68ace","my_home"。

变量:变量表示的数据是可以经常修改的。当一个数据的值需要经常改变或者不确定时,就应该用变量来表示。

定义变量的格式:变量类型  变量名;

1 int main(){

2

3 int a; // 定义变量a

4 char c; // 定义变量c

5

6   return 0;

7 }

如果是同一种类型的变量,可以连续定义,变量名之间用逗号,隔开。格式为:变量类型  变量名1, 变量名2, 变量名3, ... ;

1 int main(){

2

3 int a, c;

4

5 return 0;

6 }

第3行代码的意思是定义了2个int类型的变量,变量名分别为a、c

前面已经定义了两个变量,但是这两个变量并没有存储任何值,我们需要给变量进行第一次赋值,也叫做“初始化”。

所以变量要先定义,再初始化。

变量赋值的格式是:变量名 = 值;

1 int main(){

2 int a;

3 a = 10;

4

5 char c;

6 c = 'A';

7

8 return 0;

9

10 }

第2行代码,定义了一个变量a,第3行代码对a进行赋值操作,给a赋值为整型10. 第5行定义一个字符型变量c,第6行为字符型变量赋值为大写字母A。

在定义变量的同时进行初始化:变量类型  变量名 = 值;

1 int main(){

2

3 int a = 10; // 定义一个变量a,并且初始化为10

4

5 float b = 98.5f; // 定义一个单精度度浮点型,并且初始化为98.5f

6

7 char c = 'a'; // 定义一个字符串型c,并且初始化为a

8

9

10 return 0;

11 }

变量使用注意:

1> 不能重复定义同一个变量

下面的代码为错误的:

1 int main(){

2

3 int i = 10;

4

5 int i = 25; // 重复定义了一个变量i,所以会报错。

6

7 char t = '5';

8

9 return 0;

10

11 }

编译器会报第5行的错,错误的原因很简单,第3行和第5行都是定义变量i,因此在内存中会是这样

ec2e4f038f9b656bbca5c7aa63b01896.png

内存中会出现两块存储空间,而且名字都叫i,那如果我想取出变量i的值,那你说计算机取10好还是取25好呢?因此,这种做法肯定是不可以的。

2> 可以将一个变量的值赋值给另外一个变量

1 int main(){

2

3 int a = 10;

4

5 int i = a; // 将a的值,赋值给变量i,这时变量i的值也是10;

6

7

8 return 0;

9 }

在第3行定义了变量a且初始值为10;接着在第5行定义了变量i,并且将变量i的值赋值给了a。在内存中大致如下图所示:

722efbb05b242f0391165adb4e685043.png

变量i和变量a存储的值都是10

3> 变量的作用范围(作用域)是从定义变量的那一行代码开始

下面的代码是错误的

1 int main(){

2

3 int a = i;

4

5 int i = 10;

6

7 int b = i;

8

9 return 0;

10 }

编译器会报第3行的错误,错误原因是:标识符i找不到。我们是在第5行定义了变量i,因此变量i从第5行开始才有效,在前面的第3行是无效的

来源:https://www.cnblogs.com/wlios/p/4467936.html

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值