1、二进制的介绍
(1)二进制的意义
在计算机语言中2进制,8进制。10进制,16进制都是数值的表达方式
2进制中只有0,1,是满二进一
8进制中只有0~7,是满八进一(一般八进制前面要加0,比如:08,就默认是八进制)
10进制中只有0~9,是满十进一
16进制中只有0~f,满f进一(十六进制前则要加0x,比如:0xf,就默认是十六进制中的15)
但是计算机能识别的语言为2进制
(2)二进制的转换
二进制转换为十进制
十进制转换为二进制
有两种方法
第一种:
第二种:
2进制转换为8进制
(一般最高位如果是1就认为这个数是负数,是零就认为是正数,这里面默认是在int 形式下)
最终得数:0327
2进制转换为16进制
最终结果为0xc7
可以看到二进制转八进制是从右往左一次划分走三个数,而十六进制则是一次划分走四个数
2、原码、反码、补码
(1)原码,反码,补码的意义
不论原码还是反码又或者是补码,都是用1或0表示的,且原码反码补码的最高位是符号位,0代表正好,1代表负号,其他位则是数值位
原码:直接将数值按照正负数的形式翻译成⼆进制得到的就是原码。
反码:原码的符号位不动,其他位置取反
补码:反码+1
注意:正数的原码反码补码都相同,负数才需要转化,并且一般运算是都是以补码的形式进行运算
想将补码转为原码,需要的还是取反+1
3、移位操作符
(1)<<左位移操作符
原则就是
所有数向左移动一位,左边空出来的用0补位
(2)>>右位移操作符
逻辑右移:
所有数向右移动一位,右边空出来的用0补位
算数右移:
所有数向右移动一位,右边空出来的用考被挤出来的数字
代码的表达形式:
int num=10;
num<<1;
4、位操作符&、|、^
& //按位与:有一个零都为零,只有另个都为1,才是1
| //按位或:有一个为1,都为1,否则为零
(和&& ||作用效果差不多)
^ //按位异或
(都是1则为0,都是0也为0,其他则为1)
注:三个运算符都只能用到整数上
练习题:在不创建第三个变量的情况下完成两个数的交换:
#include<stdio.h>
int main()
{
int a=10;
int b=20;
int a=a^b;
int b=a^b;
int a=a^b;
printf("a=%d,b=%d\n",a,b);
return 0;
}
5、逗号表达式
从左往右依次执行,主要作用是切割语句
6、下标访问[],函数调用()
1、下标访问:
int arr[10]={1,2,3,4,5,6,7,8,9,10};
int arr[7]=7;
2、函数调用:
不同于下标访问,函数调用就是在()前写上要调用的函数名称
#include<stdio.h>
int test()//被调用的函数
{
printf("aaa");
}
int mian()
{
test();//在调用函数
return 0;
}
7、操作符的属性:优先级,结合性
(1)优先级
当存在多个运算符的时候会有优先算哪个的区别
比如:int a=b+cd;
就会因为的优先级大于+,所以就优先算c*d,在算b+
(2)结合性
如果想打破优先级呢就可以利用(),就像数学中的运算一样
比如:int a=(b+c)*d;
这种情况下就需要优先算括号内的
(3)注意
有一些错误的运算格式尽量不要写,不要挑战系统
比如
a>b>c
c++ *—b
这种挑战系统的运算形式最好不要出现,多打两行代码