【20180618】【C/C++基础知识】进制间的转换,C语言中多维数组的使用,C++结构体struct,联合体union

本文介绍了二进制、八进制、十进制、十六进制之间的转换方法,并详细讲解了C语言中一维、二维及三维数组的应用,以及结构体(struct)和联合体(union)的概念与使用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

   1. 二进制、八进制、十进制、十六进制(参考:点击打开链接

 

  • 对比
 基数进位规则借位规则
二进制2逢二进一借一当二
八进制8逢八进一借一当八
十进制10逢十进一借一当十
十六进制16逢十六进一借一当十六
  • 书本中:

二进制(B):Binary

八进制(O / OCT):Octal

十进制(D):Decimal

十六进制(H):Hexadecimal

  • C语言(整数有三种表示方法:八进制、十进制、十六进制)

八进制:以0开头,由0~7组成。(%o)

十进制:除表示正负的符号外,以1~9开头,由0~9组成。(%d表示int型 / %u表示unsigned int型)

十六进制:以0X或0x开头,由0~9 A~F(或a~f)组成。(%X大写 / %x小写)

  • 进制间的转换

(1) 二进制 VS 十进制:

二进制转换为十进制:把二进制数按权展开相加

十进制转换为二进制:整数部分(除2取余倒排列)

                                小数部分(乘2取整正排列)

(2) 二进制 VS 八进制:

二进制转换为八进制:(取三合一)以小数点为界,小数点位置不变分别向左、向右取三个数构成一个八进                                       制数(三位按权展开相加),若最后不够三个二进制数,则可在最左、最右补0。

八进制转换为二进制:(取一分三)小数点位置不变

(3) 二进制 VS 十六进制:

二进制转换为十六进制:(取四合一)

十六进制转换为二进制:(取一分四)

规律: N进制向十进制转换都是按位权展开相加,以小数点为界,小数点向左为0 1 2...,小数点向右为-1 -2 -3...。N进制位权为N,例如:八进制23.45转换为十进制(2*8^1 + 3*8^0 + 4*8^-1 + 5*8^-2)

 

   2. C语言中多维数组的使用(参考:点击打开链接

  • 数组(Array):一维数组、二维数组(矩阵)、三维数组(参考:点击打开链接

一维数组:

float a[5]  // 数组a有5个元素,注意[]里面为常量表达式,可以是1+4,也可以是5,但不能是3+i
a[3]      // 引用一维数组元素用单下标

二维数组:

float a[3][4]  // 二维数组a有3*4个元素
a[1][2]      // 二维数组的引用用双下标

三维数组:

float a[2][3][4] // 三维数组a有2*3*4个元素
a[1][2][3]      // 三维数组元素的引用用三下标

  

   3. C++结构体struct的使用

  • struct的使用

例:在学生成绩登记表中需要记录学生姓名、学号、成绩、名次等信息,这些信息属于不同的数据类型,因为同一个数组内的数据的数据类型和长度必须保持一致,因此为了解决这一问题,C语言给出了另一种数据类型—“结构”。

它是C/C++关键字。

  • typedef struct和struct的区别(参考:点击打开链接
    struct group
    {
       int a;
    };
    // 后面申请group变量时,需要struct group a;
    
    typedef struct group
    {
       int a;
    }Group;
    // 后面申请group变量时,只需要Group a;Group相当于这个结构体的别名。

   参考:点击打开链接

 

   4. C++联合体union的使用(参考:点击打开链接

  • union的定义

联合是种特殊的类,是一种构造类型的数据结构,一个联合中可以定义多种不同的数据类型。这些数据共享一段内存,达到节省空间的目的(还有一个节省空间的类型:位域)。

  • union和struct的区别

联合和结构的本质区别在于:结构中各成员都各自的内存空间,一个结构变量的总长度是各成员长度之和;而联合中的数据共享同一个内存空间,一个联合变量的长度等于所有成员中的总长度。

 

注:联合中的共享不是说把多个成员同时装入一个联合变量中,而是指该联合变量可被赋予任何一个成员的值,但每次只能赋一次值。

  • 如何定义?
union test
{
   test() {}
   int office;
   char teacher[5];
};
// 定义了一个名为test的联合类型,它含有两个成员,一个是整型,一个是字符型。
  联合定义之后可进行联合变量说明,被说明为test类型的变量可存放整型量office或字符数组teacher。
  • 如何说明?

联合变量的说明有三种形式:

(1) 先定义再说明

union test
{
   int office;
   char teacher[5];
};
union test a,b;
// 说明a,b是test联合类型

(2) 定义同时说明

union test
{
   int office;
   char teacher[5];
}a,b;

(3) 直接说明

union
{
   int office;
   char teacher[5];
}a,b;

经说明后,a,b都属于test联合类型。

  • 如何使用?

联合变量的成员表示为:联合变量名.成员名。

例如:a被说明为test类型的变量后可使用a.class。不允许只对联合变量名做赋值或其他操作。

参考:点击打开链接

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Satisfying

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值