各进制的表示法
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 0
void main() {
int num1=true;
printf("%d",num1);//输出:1
}
define常量的原理
在预编译时(代码编译之前)进行替换,将代码中所有使用到的define常量替换为常量值
以下代码为例
#define A 1
#define B A+3
#define C A/B*3
想象中,上述代码的公式应该是
A=1
B=A+3
=1+3
=4
C=A/B*3
=1/4*3
=0 想象中应该是等于0,因为1/4=0.25,int类型默认舍弃小数,即0,0*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*3
C=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不是直接常量