1、 写法1:if('A'==a) { a++; }
写法2; if(a=='A') { a++;}
写法1比较好,若将“==”误写成“=”,编译器不允许对常数赋值就可检查到错误。
2、写法1:for(i=0;i<9;i++){ X=i+Y+J*7; }
写法2:
S=Y+J*7;
for(i=0;i<9;i++){
X=i+S;
}
写法2比较好,将部分加法放到了循环体外,提高了效率。
3、
unsigned int a=0xFFFFFFF7;
unsigned char i=(unsigned char)a;
char* b=(char)&a;
printf("%08x,%08x",i,*b); //数据输出的最小位数为8位,% x以十六进制小写输出
unsigned int 变量赋值给unsigned char变量时会发生字节截断(3位和高于3位的将被程序自动抛弃)。
答案:000000f7, fffffff7。
4、各个平台下基本数据类型的字节数
16位平台
char 1个字节8位
short 2个字节16位
int 2个字节16位
long 4个字节32位
指针 2个字节
32位平台
char 1个字节8位
short 2个字节16位
int 4个字节32位
long 4个字节
long long 8个字节
指针 4个字节
64位平台
char 1个字节
short 2个字节
int 4个字节
long 8个字节(区别)
long long 8个字节
指针 8个字节(区别)
5.unsigned char a=0xA5;
unsigned char b=~a>>4+1;
printf(“b=%d\n”,b);
知识点:类型转换,计算第二个表达式时,编译器会先把a和4的值转换为int型后再运算,当计算结果出来后再把结果转换为char型赋值给b.
运算符优先级:~ 优先于 >>
6. a , b交换
方法1:
a=a+b;
b=a-b;
a=a-b;
缺点:数值较大时,可能出现超界的问题。
方法2:
a=a^b;
b=a^b;
a=a^b;
优点:不会出现超界的问题