1、位运算
2、
int main()
{
unsigned a, temp;
printf("请输入十六进制:\n");//按十六进制输入
scanf("%x",&a);
temp=a>>3; //a右移三位,放入temp
temp&=0x1f; //temp=temp&0x1f 取temp的低五位
printf("a=%x,temp=%x",a,temp);
}
3、类型转换
(1)、不同级
i|j&k*m ————>i|(j&(k*m))
(2)、同级
i/j*k————>(i/j)*k 结合性:从左到右
*p-- ————>*(p--) 结合性:从右到左
(3)、特殊
*p*p ————> (*p)*p:取出p指向的内存单元内容,然后与p相乘
判断是否是闰年?
//判断是否是闰年? //方法:某年是否能被4整除但不能被100整除,或者能被400整除,则是闰年 void main() { int year,leap; printf("请输入年份:\n"); scanf("%d",&year); leap=year%4==0&&year%100!=0||year%400==0;//leap=(year%4==0)&&(year%100!=0)||(year%400==0) if(leap) { printf("%d 是个闰年!",year); } }
&&与&的区别
x=y=z=1;
--x&&++y||z++; ((--x)&&(++y))||(z++)
&&优先级>||,故先运行(--x)=0 &&(++y), (++y)不必运行
x=0 y=1 z=2
4、常量
(1)、整形常量
内存中存放:
数值以“补码”形式存放,最左一位为符号位。
表示:
十进制常量,数值由小到大:int ——>long int ——>unsigned long int
八进制和十六进制,数值由小到大:short int——> int ——> unsigned int——>long int——>unsigned long int
还可以有后缀: 无符号型后缀(u/U)和长型后缀(l/L)
(2)、浮点型常量
内存存放: 按指数形式存放,把一个浮点数分成小数部分(规范化)和指数部分分别存放
表示:
十进制数形式:由数字和小数点组成(必须有小数点,且小数点前或后必须有数字)
指数形式:字母e/E前必须有数字,且e后面的指数必须为整数
规范化指数形式:在字母e/E之前的小数部分,小数点左边应有一位(且只能有一位)非零数字
双精度型的:不带后缀
单精度型的:带有F/f后缀,又叫浮点型
长双精度型:带有L/l后缀
(3)、字符型常量
表示: 单引号'' 括起的一个字符
特殊: 转义字符:
- 简单转义字符:
- 八进制转义字符:\ + 1~3个八进制数字
- 十六进制转义字符:\ + x + 1~2个十六进制数字
存放形式:
不是将该字符本身放入内存中,而是将其对应的ASCII码值放到内存中
字符常量和字符串常量
"ABC\n\\TH\064\?" ==“(A)(B)(C)(\n)(\\)(T) (H)(\064)(\?)”长度 9,占用内存单元数 10。需要注意的是,在该字符串中有转义字符,\n 为换行,\\为反斜杠字符,\064 为八进制转义字符,对应 ASCII 码为 52 的字符'4'。
x=−30*5%−8; //运算顺序:从左到右 ((-30)*5)%(-8)=-150%-8=-6
x=−6。第二个运算是取余操作。
(4)、字符串常量
表示: 双引号“”括起的零个或多个字符
存放形式: 在存储字符串常量时自动在后加上'\0'作为字符串结束标志 ,字符数组存放字符串变量
(5)、符号常量
define:宏定义,变量一般大写形式
const:其变量值,不可改,且在定义时就初始化