一、字节
1byte : char
2byte: short
4byte; int long
8byte : double long double
二、位
1字节=8bits
三、标识符
C语言规定,标识符必须由字母、下划线、数字三类符号
组成,并且第一个字符必须为字母或下划线。
(注:自定义的标识符不能与C语言规定的标识符相同,eg:int (错误) nit (没毛病))
四、数据类型转换
C语言标准建议:
(1) 长->短
低字节直接拷贝,高字节直接discards(抛弃,丢弃),也没办法要啦。
(2) 短->长
低字节直接拷贝,那么高字节呢?
如果短的是无符号的,那么高字节全部补0;
如果短的是有符号的,那么高字节全部符号位。
优先级: 在含有多个运算符的表达式中,先算哪个运算符的问题。
单目运算符 > 算术运算符 > 关系运算符 > 逻辑运算符 > 条件运算符
> 赋值运算符 > 逗号运算符
(当选官,罗条幅,逗)
把变量a的第5bit置1,其他bit位不变,代码该如何写?
a = a | (1 << 5);
一个bit位与0进行“按位异或 ^”,保留原值
x ^ 0 == x
一个bit位与1进行“按位异或 ^”,结果取反
x ^ 1 == ~x
(1) 有一个整型变量a,要使a的第5bit保留,其他位取反,
代码该如何写?
a = a ^ (~(1 << 5)) ;
(2)如把变量a的第5bit位清掉,其他bit位不变,代码该怎么写?
a = a & ~(1 << 5)
(3) 我们在程序中,有时候,经常需要交换两个变量的值
int a = 5, b = 6;
使用中间变量t
int t;
t = a;
a = b;
b = t;
假设要求不使用中间变量呢? (两个数相互异或)
a = 3 b = 4
011
100
a = a ^ b => 111
b = b ^ a => 011 3
100
111
a = a ^ b => 100 4
111
011
**(1) 有一个整型变量a,要使a的第4bit到第8bit变为0,其他位不变
该如何操作?**
( &4~8位为0->5个1取反->0~4:按位左移4位——>a=a&~(0x1f<<4))
a: b31 b30.... b9 b8 b7 b6 b5 b4 b3 b2 b1 b0
& 1 1 ..... 1 0 0 0 0 0 1 1 1 1
0x1f => 11111
0x1f << 4 0000000..00 11111 0000
~(0x1f << 4) 111111..11 00000 1111
a = a & ~(0x1f << 4);
**(2) 有一个整型变量a,我想取这个变量的第4bit到第8bit的值,该
如何操作?**
(去后&1:右移四位&5个1——>a = (a>>4)&0x1f)
a: b31 b30.... b9 b8 b7 b6 b5 b4 b3 b2 b1 b0
a >> 4
xxxxx b31 b30.... b9 b8 b7 b6 b5 b4
00000000000000000000 1 1 1 1 1
(a >> 4) & 0x1f ;