例1-3
#include <stdio.h>
#define PRICE 30;
//勇表示符号代表一个常量,称为符号常量 ,price就是符号常量
int main()
{
int num,total;
num = 10;
total = num*PRICE;
printf("total = %d、n",total);
}
//符号常量与变量不同。它的值在其作用域内不能改变,也不能再被赋值
//符号常量的使用好处:1.含义清楚。 2,能做到一改全改
#include <stdio.h>
int main()
{
printf("%d\n",sizeof(int));
}
整型变量 数的范围 字节数
int 2的32次 4
unsigned int 同上 同上
short int 2的16次 2
unsigned short int 同上 同上
long int 2的32次 4
unsigned long 同上 同上
**
**
#include <stdio.h>
int main()
{
int a,b,c,d;
unsigned u;//无符号整型,可以存放的正数范围比有符号整型中的范围大一倍
//整形可以看为整数
a = 12;
b = -24;
u = 10;
c = a+u;
d = b+u;
printf("%d+%d=%d,%d+%d=%d\n",a,u,c,b,u,d);
//("%d+%d=%d,%d+%d=%d\n",a,u,c,b,u,d);==("a+u=%d,b+u=%d\n", c, d);!!!!!
//%d以整型的形式输出
return 0;
}
!!!!!悟啦!!!!
#include <stdio.h>
int main()
{
short int a,b;
a=32767;
b=a+1;
printf("%d,%d\n",a,b);
}
2的16次=65536
2的15次=32768,因为包括0,所以最多到32767
32767:01111111111111111(第一个0表示正负,电脑不识得-+)
32768:1000000000000000(只有16位,1表示负数了,所以没了!!)
//用补码(储存的格式)可以计算
最后的24位全是指数,E后面的数,也就是10^,所以表示范围
ps:平时直接用double即可,因为double是最大的
因为double转换成float精度减少导致错误%f
另外用%d算3/22的结果为2,因为这是整型所以是3/2先约成整数1再2
因为是浮点型,所以必须加小数点
x=120时都是用char来表示的时候
65-90 :大写字母
97-122 :小写字母
//字符型数据--像字符变量赋予整数
#include <stdio.h>
int main()
{
char a,b;
a=120;
b=121;
printf("%c.%c\n",a,b);//用字符型的格式打出 --去找aska码
printf("%d,%d",a,b);//以整型的格式打印
return 0;
}
和
//字符型数据--像字符变量赋予整数
#include <stdio.h>
int main()
{
char a,b;
a='x';
b='y';
printf("%c.%c\n",a,b);//用字符型的格式打出 --去找aska码
printf("%d,%d",a,b);//以整型的格式打印
return 0;
}
都得到此结果
//将小写字母转换成大写字母(相差32)
#include <stdio.h>
int main()
{
char a,b;//定义两个字符型数据
a='a';
b='b';
a=a-32;
b=b-32;
printf("%c,%c\n%d,%d\n",a,b,a,b);
return 0;
}
比较cahr a=33;和int a=33;
答:有区别,打印表面无区别,但是一个是字符一个是数字,变量类型不一样。
char只是字符常量,int的范围比char要多很多
“ ”后边默认加了\0但是不显示,表示结尾的标志
字符常量‘内’只能写一个字母&数字;字符串常量可以写多个
因为char字符变量只占一个字节,有8位=258(2的八次),asc码一共有256
char只有8位,“a=”“a\0”有两个以上即16位以上,不能使用。
3)4)都涉及到cpu的储存。
int = long 这样就会发生精度的损失。
改成double&float的时候需要把%d改成%f
因为PI是实型,r为整型,两者运算时都会转化为精度最大的double。!!这个是截取,并非四舍五入。!!
因为计算机是二进制储存的,没有四舍五入
eg:A=B就是左加右,即右结合,-A符号在左,即左结合。-x为x加上负号,所以为左结合性。
=为右结合性,因为是将后边的值赋到前边去。从右往左执行。
除了赋值运算符外,所有二元运算符都是左结合的
左右结合性的解释
若%d改为%f–编译错误–整型除以整型–肯定不行
改:如果运算量中有一个是实型,则结果为双精度实型。
%求模,求余数----
到后边循环自加自减用处很大
eg:定义:i=5;y=i++ =为右结合性,i先输出5所以y=5,然后i加一变成6。输出:i=6,y=5.
定义:i=5;y=++i, 输出:i=6,y=6
因为根据上一轮输出i已经等于9了,所以再减一就是8.–因为它是变量,所以是随着编译过程随时变化的。
首先回答 q = (++j)+(++j); 为什么是14
因为会先执行两个括号里面的自增,得到 j==7
所以结果为14
然后来看 q = (++j)+(++j)+(++j); 为什么是22
因为编译器会自作聪明的进行“优化”
先将某两个进行结合 q = (++j)+ ((++j)+(++j));
完成两个里面的计算得到 j = 7,q = (++j) + 14;
所以结果为22
最后,强烈不推荐这样写代码,一是不同编译器可能会输出不同结果,二是代码可读性极差
-------主要是编译器不同输出结果不一样,看软件。
=:将表达式的值赋给变量。
该处逗号运算符的作用:求出a+b以及b+c的值,将其浓缩为一个语句。
=优先于逗号,这里y=(x=a+b)=6,如果题目是y=(x=a+b,b+c),这时候y=b+c=10
这里y=表达式1,因为“=”的优先级要高于“,”要让结果为表达式4的话需要在表达式前加中括号
因为逗号优先级最低 先把括号中的值算出来 最后就是右边的值复制给y 因为等号是右结合 所以取最右边一个表达式得出来的值给y
有括号最后一个,无括号第一个,自己试几遍就知道了。