常量与变量
1.
**常量:**程序运行中,值不改变的量
变量:int num=5;值可以变的量
2
C语言三种简单数据类型:整型,实型,字符型
%c %d %ld %s %f
整型-进制的转换
**1.十进制:**默认的进制数,
int a=5; //将十进制数10放到变量a中
**2.十六进制:
** 在代码中的标志为0**
int b=0x5ab;//将十六进制数15ab放到变量a中
要将16进制转为2进制的话:
1.
可以直接每位✖16的位数次方累加即可=十进制,然后再将十进制对2进行辗转相除
2.
将16进制的每一位进行四位展开变成二进制码的二进制数
**十六进制转为二进制的对应关系**
0 -> 0000
1 -> 0001
2 -> 0010
3 -> 0011
4 -> 0100
5 -> 0101
6 -> 0110
7 -> 0111
8 -> 1000
9 -> 1001
A -> 1010
B -> 1011
C -> 1100
D -> 1101
E -> 1110
F -> 1111
对于十六进制数 0xAB,转换步骤如下:
将 A 转换为 1010
将 B 转换为 1011
现在我们可以将两个四位二进制数组合在一起,得到十六进制数 0xAB 对应的二进制数为 10101011。
因此,十六进制数 0xAB 转换为二进制数为 1010 1011 0xAB实际对应就是AB转为二进制即可,定义有前导输出无前导。
3.八进制,前导加0
int a=016;//正确
int a=018;//错误,需<8
printf("%o",016);//定义有前导,输出无前导,结果为16
4.一些进制转换并输出的疑难点:
1.以下代码表示为将16进制数0xff转为十进制输出为255
printf("%d",0xff);
原因:
(15 * 16^1) + (15 * 16^0)
= (15 * 16) + (15 * 1)
= 240 + 15
= 255
2.将八进制数转为十进制输出
printf("%d,%0",012,22);
输出为:10,26
1*8^1+2*8^0=10(8进制转为10进制)
22转为8进制就是辗转相除8=26
如果22转为16进制就是:
2 ÷ 16 = 1 余 6
余数 6 对应十六进制中的字符 "6"。
因此,22 转换为十六进制数为 16。
4.整型变量
区分VC和TC下的区别,int在TC下两个字节,就是16个二进制位,而在VC下是32位,8字节
1.
int的范围
:-32768~32767 注意整型是向下取整1.5->1
2
.长整型注意事项:
long a=123;
printf("%ld,%ld\n",12l,a);
输出:12,123
3.无符号整型
:unsigned int x=123 , “%u”
目的就是忽略符号位的1负数所带来的影响
比如下述unsigned输出-1:
以下皆为TC环境,int2字节,16位,固然最值范围为0-65535
步骤:-1是负数,unsigned(忽略符号位)将负数时不可转为补码的(用来表示有符号的整数的),-1——>1111xx1111
16个1然后第一个1的作用忽略:值为2^16-1
5.原码反码补码
在计算机中,通常使用二进制补码进行存储;
正数的原反补都一样,故直接输出即可;
-2
为例
原:1000xx0010
反:固定符号位不动,其余取反 11111xx01
补:+1
原码: 10000000 00000000 00000000 00000010
反码: 11111111 11111111 11111111 11111101
补码: 11111111 11111111 11111111 11111110
输出仍为-2
解释:
对于中间的 1,它是补码表示中的位权值,用来表示负数的部分。在补码表示中,最高位(最左侧位)为符号位,其余位用来表示数值部分。
假设我们有一个数的补码表示为 11111111 11111111 11111111 11111110,我们可以按照以下步骤计算它所代表的负数值(以32位为例):
1.确定符号位:最高位为1,表示负数。
2.取反操作:将除符号位外的其他位取反,即 00000000 00000000 00000000 00000001。
3.加1操作:将取反后的结果加1,即 00000000 00000000 00000000 00000010。
最终结果为 -2。因此,补码表示 11111111 11111111 11111111 11111110 对应的负数值为 -2,其中的中间
6.实型
实型常量
1.小数形式
1.5 ,2 , -2.5
2.指数形式
由e或者E组成(E的左右必须都是数字)
E的右侧必须为整数不能小数
实型变量
注意float %f的输出默认时保留六位小数
float a=1;
printf("%f\n",a);
printf("%f\n",1.0);
例子:
7.字符型
注意字符常量只能是单个字符:不能是’ab’这种
char x='ac';(错误)
8.转义字符常量
这里需要注意八进制和十六进制对长度的影响
/xab为1+/107是1-3位的八进制数为1+\为1+A为1+\对"的转义为1=5
字符串常量
当问题是字符串占有几个字节时,需要注意加上末尾的\0
不同数据类型的混合运算
int a = 10;
long b = 20;
int c = a + b; // 结果为长整型,隐式将int转换为long
float a = 3.14;
double b = 2.71828;
double c = a * b; // 结果为双精度浮点数,隐式将float转换为double
int a = 5;
float b = 2.5;
float c = a / b; // 结果为单精度浮点数,隐式将int转换为float
float a = 3.14;
double b = 2.71828;
double c = a + b; // 结果为双精度浮点数,隐式将float转换为double
强制转换符的使用例子
float a = 3.14;
int b = (int)a; // 将浮点数a强制转换为整数类型
int a = 5;
float b = (float)a; // 将整数a强制转换为单精度浮点数类型
double a = 3.14159;
float b = (float)a; // 将双精度浮点数a强制转换为单精度浮点数类型
int a = 1000;
short b = (short)a; // 将整数a强制转换为短整型,可能发生溢出