1、
对于整型int
1个字节有8位。
int一般只占用2个字节,
long int占用4个字节。
2、
什么是反码跟补码
正数的补码就是其本身;
负数的补码是在其原码的基础上,符号位不变,其余各位取反,最后+1。(也即在反码的基础上+1)
[+1] = [0000 0001]原= [0000 0001]反= [0000 0001]补
[-1] = [1000 0001]原= [1111 1110]反= [1111 1111]补
对于负数,补码表示方式也是人脑无法直观看出其数值的。通常也需要转换成原码再计算其数值。
为什么会出现反码跟补码呢,原因很简单!!
就是因为计算机不能直接识别负数,并且我们一般规定1个字节8位的首位为符号,0则代表正数,1代表负数。
这时直接用正数加负数得到的结果就跟原来相差很大,可以说是不正确。
所以就引入了反码,但是还是出现了一个问题,计算出来的数据跟实际数据相差1,原因就是+0跟-0的出现。
比如说+0是00000000,-0是10000000。
所以后来再引入了补码。
正数的反码还是不变,正数的补码还是不变。
但是,
负数的反码则是1变0,0变1。补码则是符号位不变,其余按位取反,再加1。最后正数跟负数相加,结果还要在-1。
3、
赋值语句跟赋值表达式的区别:
列如
a = 1;
是一个赋值语句
再列如
a = 1
这是一个赋值表达式,显而易见什么是赋值语句什么是赋值表达式。
4、与或非, && ,||,!
这三者的优先级关系
! > && > ||
例如
a = 3,b = 4,c = 5
a || b+c && b -c
这题我刚开始也看错了,我先算a || b+c 最后再算&&算出结果为0。但是真实答案为1。
正确答案的解题过程: 因为&&的优先级高于||,所以先算右边部分即b + c && b-c ,得0,最后算
a || 0得 1。是不是很简单。
5、scanf()会遇到的问题
int num;
scanf("%d",&num); //注意这里的&,非常重要,不要漏了,你漏了他不会报错,能运行,但是会获取不了数据。!!!!!
6、while语句跟do ........while的区别;
while是先判断条件是否成立,然后在执行。
do.......while是先执行后判断条件。他是不管条件是否成立都是先执行以下,然后判断条件是否成立,以便继续运行下去。如果成立则继续运行,否则停止。
(本人觉得,do......while的产生有点多余。你看啊,do.....while既然是要先执行后判断条件,就跟1、先使用表达是语句,后使用while语句一样。)