4.C语言各进制的常量表示

44 阅读2分钟

各进制的表示法

int num2=0b10; //0b开头表示二进制
int num8=02; //0开头表示八进制
int num10=2; //默认十进制
int num16=0x2; //0x开头表示十六进制
printf("%d %d %d %d",num2,num8,num10,num16);//输出:2 2 2 2

直接常量

直接常量表示下列这种,都没声明变量,直接拿来使用的,叫做直接常量

printf("%d",16);

声明式常量

define

define可以任意使用,如果定义的define常量是int类型,但赋值给了short也不会报错,因为define不做类型检查,只有在代码编译的时候会报错

define常量声明时也不用指定数据类型

define不能调试,因为在预编译时就已经替换为常量值了

#include <stdio.h>//在方法外部定义,使用#define 常量名 常量值
#define true 1
#define false 0void main() {
​
    int num1=true;
    printf("%d",num1);//输出:1
}

define常量的原理

在预编译时(代码编译之前)进行替换,将代码中所有使用到的define常量替换为常量值

以下代码为例

#define A 1
#define B A+3
#define C A/B*3
​
想象中,上述代码的公式应该是
A=1B=A+3
=1+3
=4
​
C=A/B*3
=1/4*3
=0  想象中应该是等于0,因为1/4=0.25,int类型默认舍弃小数,即00*3=0
​
​
但事实并不是,define就是一个简单的替换
C=A/B*3
=1/1+3*3
=1*9
=10 真实结果为10
​
使用define时要避免这种情况带来的问题,加上括号即可
#define A 1
#define B (A+3)
#define C A/B*3C=A/B*3
=A/(A+3)*3
=1/(1+3)*3
=1/4*3
=0

const常量

const常量语法:const 数据类型 常量名 = 常量值

const常量值只能用直接常量赋值

const int A=1;//正确const int B=A+3;//编译错误,因为A不是直接常量