第二天的记录,关于c语言的基本数据类型,进制转换和优先级的问题
在linux下gcc -S xxx.c 之后在vi xxx.s可以看汇编代码的
gcc -E xxx.c预定义
我的程序:
<span style="font-size:18px;">#include <stdio.h>
int main() {
int a = 1234.5;
double b = 1.5e30;
printf("a=%d\n", a);//只输出整数部分
printf("b=%f\n", b);
a = (int)1.5e30;
printf("a=%d\n", a);
printf("a=%x\n", a);//32位一共,按16进制输出
return 0;
}</span>
sizeof的应用:
<span style="font-size:18px;">#include <stdio.h>
int main() {
int n =10;
printf("%i\n", sizeof(int));
printf("%d\n", sizeof(n));</span>
<span style="font-size:18px;">printf("%d\n", sizeof(n = (n + 5)));
printf("n=%d\n", n);//sizeof里的运算不被执行
return 0;
}</span>
宏以及const:
#include <stdio.h>
#define DATE 20141006
int main() {
const double PI = 3.14;
int const student_num = 21;
printf("PI=%g, student_num=%d\n", PI, student_num);
//PI = 3.15;对const类型的修改会出错
return 0;
}
逻辑运算:(&& 、||、 !、 >、 <、 >=、 <=)
位运算:在计算机存储中都是以补码存储的
#include <stdio.h>
int main() {
int m = -1;
unsigned int n = -1;
int a = 0x12, b =0x34, c =0x56, d = 0x78;
printf("%d, %d, %d\n", ~20, ~-1, ~0);
printf("%u, %x, %d\n", n, n, n);
printf("%x, %x\n", n >> 3, m >> 3);//右移的时候有符号和无符号的区别是补1还是补零
printf("%x, %x\n", n, m);
printf("%x, %x\n", n << 3, m << 3);
m = 0x12345678;
printf("%x\n", (char)m);
printf("%x\n", (char)(m >> 16));
printf("0x%x\n", (a << 24) | (b << 16) | (c << 8) | d);//将之组合成一个int
return 0;
}
心得体会:
在编写代码的初期一定要形成良好的编码习惯,一定要有好的层次,这个对以后有好大的帮助,毕竟人人都喜欢规范的东西,不喜欢杂乱。
知识点总结:
要注意的是计算机存储中所有数字都是按补码存储的。。。