第一个C语言程序
#include <stdio.h>
int main(void)
{
printf("Hello world!\n");
}
打印一个Hello world! (\n换行符)
gcc -o test 1.c
./test
1.#include <stdio.h>
int main(void){
int a = 5;
// 声明一个整形变量a,初始化为5
//标示符:由字母数字下划线组成,由字母开头,下划线属于字母;不可以用关键字
//关键字:union,int float 等等
//在内存中开辟4字节空间(int),跟这4个字节起个名字叫做a,将数字5存储到这个空间里
printf("%d\n",a);
int b; //在声明时不初始化,在后面给变量赋值,称为赋值
b = 6;
return 0;
}
2.short 短整形,short a = 5;2个字节
long 长整形,long a = 5; 8字节64位存储5;
int 16位cpu占2字节,32位cpu占4字节, 64位cpu占4字节
unsigned int 16位cpu占2字节,32位cpu占4字节, 64位cpu占4字节
short 16位cpu占2字节,32位cpu占2字节, 64位cpu占2字节
unsigned short 16位cpu占2字节,32位cpu占2字节, 64位cpu占2字节
long 16位cpu占4字节,32位cpu占4字节, 64位cpu占8字节
unsigned long 16位cpu占4字节,32位cpu占4字节, 64位cpu占8字节
3.int a = 010,表示存储的8进展,转化为10禁止位8;打印也是8,不看怎么存,只看怎么读,不管是2进制2进制还是10进制,16进制,存到内存中都是2进制的补码
#include <stdio.h>
int main (void){
int a = 010;
printf(''%d\n",a); //8 10进制
printf(''%o\n",a); //10 8进制
printf(''%x\n",a); //8 16进制
return 0;
}
4.unsigned int a = 8;无符号位整形,4个字节,32位;所有位都表示大小,没负数
0000 0000 0000 0000 0000 0000 0000 1000
1000 0000 0000 0000 0000 0000 0000 1000,最左侧的不是符号位在这里,表示一个很大的数
#include <stdio.h>
int main(void){
int a = -1;
// 0xFFFFFFFF 补码形式存储
printf("%d\n",a); //结果1
printf("%u\n",a); //当作无符号位打印结果是4294967295
}
5.字符常量
'A' '*', 字符常量,计算机中是用一个数字存储1个字符的;
#include <stdio.h>
int main (void){
char _a = 'A';
printf("%c %d\n",_a,_a); //A 65(ASCII)
return 0;
}
char 在C语言中仍然是整形变量,占1个字节;不同于JAVA,
6.sizeof(),打印字节长度
#include <stdio.h>
int main(void){
int a = 5;
int b = 'A';
printf("%d %d\n",sizeof(int),sizeof(a)); // 4 4
printf("%d %d\n",sizeof(char),sizeof('A')); // 1 4
printf ("%d %c",b,b); //65 A 不看怎么存,只看怎么读
return 0;
}
7.一个高位数赋值给一个低位数,会发生截断,如果高位数超过当前类型允许的最大值,超过部分直接去掉
位扩展的时候正数补0,负数补1;低位转高位,char a = -1;short b = a; 1111 1111 ->1111 1111 1111 1111
8.实型数据大小
float 4字节 有效小数位数6-7位
double 8字节 有效小数位数15-16位
long double 16字节 有效小数位数18-19位
9.scanf 输入
#include <stdio.h>
int main(void){
int a;
int b;
scans("%d%d",&a,&b);//输入a和b的值;
printf("%d,%d",a,b);
return 0;
}
10.不同类型运算时会发生类型转换
char -> short -> int -> unsigned int -> long -> double <- float
a.短字节向长字节看齐:float a = 9.0,char b = 3;a + b 变为float;b先变为float类型再计算
b.有符号位向无符号位看齐
c.整形向浮点型看齐
d.单精度向双精度看齐
11.自增自减运算符
int i = 0,j = 0;
j = i ++; //取i+之前的值
printf("i == %d,j==%d",i,j); //1 0
j = i --; //取i-之前的值
printf("i == %d,j==%d",i,j); // 0 1
j = ++i; //取i+之后的值
printf("i == %d,j==%d",i,j); 1 1
int a = ++i++;右结合性,同级运算先算右边;但是这么写也是错的。i++的表达式是一个常量,自增自减运算符是对变量进行的
a += 5; a = a + 5; 效果一样; a *= 5等
12.运算符优先级
!++ --
* / %
+ -
> < >= ==
&&
||
= += 等复合运算符
, 逗号运算符非常低