一、操作符
1、算数操作符: +(加) -(减) * (乘) / (除) % (取模)
2、移位操作符:<<(左移) >>(右移)
3、位操作符‘: &(按位与) | (按位或) ^(按位异或,相同为0,不同为1)
4、关系操作符: <(小于) >(大于) ==(等于) !=(不等于) <=(小于等于或不大于) >=(大于等于或不小于)
5、单目操作符:!(逻辑反操作) -(负值) +(正值) &(取地址) ~(二进制按位取反) --(自减) ++(自增)
*(间接访问操作符) sizeof(操作数的类型长度,以字节为单位)
6、条件操作符: 表达式1?表达式2 :表达式3 (三目操作符 列:a=5>3(表达式1) 5(表达式2): 3(表达式2);5>3 成立a=5,不成立a=3)
7、赋值操作符: =(赋值)
8、逻辑操作符:&&(逻辑与) ||(逻辑或)
1、算数操作符实例:
#include<stdio.h>
#include<stdlib.h>
#include<stdlib.h>
int main()
{
int num1=3;
float num2=3.3;
double num3=3.5;
printf("整型num1=%d\t单精度浮点型num2=%f\t双精度浮点型num3=%lf\n",num1,num2,num3);
{
int num1=3;
float num2=3.3;
double num3=3.5;
printf("整型num1=%d\t单精度浮点型num2=%f\t双精度浮点型num3=%lf\n",num1,num2,num3);
printf("\n整型除法num1/2=%d\n",num1/2);//整数除法
printf("整型除以浮点数运算num1/2.0=%d\n",num1/2.0);//(输出整型,浮点数运算)错误结果0
printf("整数浮点型输出num1/2=%f\n",num1/2);//整型运算,后转换成浮点型数输出
printf("整数除以浮点型数,浮点型输出num1/2.0=%f\n",num1/2.0);//整型数浮点型运算输出,至少有一变量为浮点型,2.0即为浮点型数
printf("整型除以浮点数运算num1/2.0=%d\n",num1/2.0);//(输出整型,浮点数运算)错误结果0
printf("整数浮点型输出num1/2=%f\n",num1/2);//整型运算,后转换成浮点型数输出
printf("整数除以浮点型数,浮点型输出num1/2.0=%f\n",num1/2.0);//整型数浮点型运算输出,至少有一变量为浮点型,2.0即为浮点型数
printf("\n单精度浮点型运算输出num2/2=%f\n",num2/2);//单精度浮点型除法
printf("双精度浮点型运算输出num3/2=%lf\n",num3/2);//双精度浮点型除法
printf("浮点型转换整型运算整型输出(int)num3/2=%d\n",(int)num3/2);//浮点型强制转换成整型除法运算后输出
printf("浮点型运算整型输出num3/2=%d\n",num3/2);//浮点型除法,转换成整型输出,结果错误
printf("双精度浮点型运算输出num3/2=%lf\n",num3/2);//双精度浮点型除法
printf("浮点型转换整型运算整型输出(int)num3/2=%d\n",(int)num3/2);//浮点型强制转换成整型除法运算后输出
printf("浮点型运算整型输出num3/2=%d\n",num3/2);//浮点型除法,转换成整型输出,结果错误
printf("\n整型取模运算num1%%2=%d\n",num1%2);//取模运算仅能为整运算,注%%表示打印%
printf("浮点型转换整型取模运算(int)num2%%2=%d\n",(int)num2%2);//整型变量强制转换成整型,变量仅保留整数部分,可进行取模运算
//printf("%d\n",num2%2);//浮点数不可进行取模运算
printf("浮点型转换整型取模运算(int)num2%%2=%d\n",(int)num2%2);//整型变量强制转换成整型,变量仅保留整数部分,可进行取模运算
//printf("%d\n",num2%2);//浮点数不可进行取模运算
system("pause");
return 0;
}
return 0;
}
注意:浮点型运算输出,至少有一变量为浮点型数( printf("整数除以浮点型数,浮点型输出num1/2.0=%f\n",num1/2.0);//整型数浮点型运算输出,至少有一变量为浮点型,2.0即为浮点型数)
取模运算必须是整型运算
2、移位操作符:
左移符:<< (列:(5<<2)5--->0101左移2位为:010100--->20)
右移符:>> (列:(5>>2)5--->0101右移2位为:0001----->1)
应用:
//判断一个数是正数还是负数
#include<stdio.h>
#include<stdlib.h>
#include<stdio.h>
#include<stdlib.h>
int main()
{
int num=01;
printf("输入数字:");
scanf("%d",&num);
{
int num=01;
printf("输入数字:");
scanf("%d",&num);
if((num>>31)&1)//32位最高位表示正负数,1表示负数,0表示正数
printf("负数\n");
else
printf("正数\n");
printf("负数\n");
else
printf("正数\n");
system("pause");
return 0;
return 0;
}
//1.写一个函数返回参数二进制中 1 的个数
#include<stdio.h>
#include<stdlib.h>
#include<stdio.h>
#include<stdlib.h>
int count_one_bit(int num);
int main()
{
int num=0;
int count=0;
printf("输入数字:");
scanf("%d",&num);
count=count_one_bit(num);
printf("二进制为一的有%d位\n",count);
system("pause");
return 0;
}
{
int num=0;
int count=0;
printf("输入数字:");
scanf("%d",&num);
count=count_one_bit(num);
printf("二进制为一的有%d位\n",count);
system("pause");
return 0;
}
int count_one_bit(int num)
{
int n=0;
int i=0;
int num1=num;
{
int n=0;
int i=0;
int num1=num;
while(num1>0)
{
num1=num>>i;
if((num1&1)==1)
{
n++;
}
i++;
}
return n;
}
{
num1=num>>i;
if((num1&1)==1)
{
n++;
}
i++;
}
return n;
}
//2.获取一个数二进制序列中所有的偶数位和奇数位,分别输出二进制序列。
#include<stdio.h>
#include<stdlib.h>
void bit_search(int num);
int main()
{
int num=0;
printf("输入数字:");
scanf("%d",&num);
bit_search(num);
system("pause");
return 0;
}
int main()
{
int num=0;
printf("输入数字:");
scanf("%d",&num);
bit_search(num);
system("pause");
return 0;
}
void bit_search(int num)
{
int n1=15;//奇数位下标
int n2=15;//偶数位下标
int i=0;//移位变量
int bit_odd[16]={0};//保存二进制数,奇数位最多有16位(共32位)
int bit_even[16]={0};
int num1=num;//移位后数值,用于判断终止
{
int n1=15;//奇数位下标
int n2=15;//偶数位下标
int i=0;//移位变量
int bit_odd[16]={0};//保存二进制数,奇数位最多有16位(共32位)
int bit_even[16]={0};
int num1=num;//移位后数值,用于判断终止
while(num1>0)
{
num1=num>>i;
if(i%2==0)
{
bit_odd[n1]=(num1&1);
n1--;
}
else
{
bit_even[n2]=(num1&1);
n2--;
}
i++;
}
printf("奇数位二进制:");
for(i=0;i<16;i++)
printf("%d",bit_odd[i]);
{
num1=num>>i;
if(i%2==0)
{
bit_odd[n1]=(num1&1);
n1--;
}
else
{
bit_even[n2]=(num1&1);
n2--;
}
i++;
}
printf("奇数位二进制:");
for(i=0;i<16;i++)
printf("%d",bit_odd[i]);
printf("\n偶数位二进制:");
for(i=0;i<16;i++)
printf("%d",bit_even[i]);
}
for(i=0;i<16;i++)
printf("%d",bit_even[i]);
}
//两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int compare(int num1,int num2 );
int main()
{
int num1=0;
int num2=0;
int count=0;
int main()
{
int num1=0;
int num2=0;
int count=0;
printf("输入数字num1:");
scanf("%d",&num1);
printf("输入数字num2:");
scanf("%d",&num2);
scanf("%d",&num1);
printf("输入数字num2:");
scanf("%d",&num2);
count=compare(num1,num2);
printf("有%d位不同\n",count);
printf("有%d位不同\n",count);
system("pause");
return 0;
}
return 0;
}
int compare(int num1,int num2)
{
int i=0;
int n=0;
//保证为正数比较,计算机存储的是二进制的补码,正数补码=原码,负数补码=原码取反+1
num1=sqrt(pow(num1,2.0));//sqrt开根号函数,qow次方函数。注:qow函数至少有1个数是浮点数运算
num2=sqrt(pow(num2,2.0));
{
int i=0;
int n=0;
//保证为正数比较,计算机存储的是二进制的补码,正数补码=原码,负数补码=原码取反+1
num1=sqrt(pow(num1,2.0));//sqrt开根号函数,qow次方函数。注:qow函数至少有1个数是浮点数运算
num2=sqrt(pow(num2,2.0));
for(i=0;i<32;i++)
{
if(((num1>>i)&1)!=((num2>>i)&1))//比较位是否相同
n++;
}
return n;
}
{
if(((num1>>i)&1)!=((num2>>i)&1))//比较位是否相同
n++;
}
return n;
}
3、位操作符:
&:与运算,有0即为0。即1&1=1,1&0=0,0&0=0
|: 或运算,有1即为1。即1|1=1,1|0=1,0|0=0
^:异或,相同为0不同为1。即1^1=0,1^0=1,0^0=0
注:计算机中存储的是数值的二进制的补码;
正数补码=原码;列:5--->0101
负数补码=原码取反+1 列:5--->0101---(取反)-->1010---(加1)--->1011(-5补码)
&的应用可看上面移位操作符的案例(|的使用与之类似)
^的应用可交换两个变量。
^交换两个变量 算数操作符交换两个变量
列:a=a^b; a=a+b;
b=a^b;//b=a b=a-b;//a
a=a^b;//a=b a=a-b;//b
具体案例可访问:http://blog.csdn.net/wejboke626/article/details/78058248
4、逻辑操作符:
&&:逻辑与,表达式1&&表达式2;表达式1不成立时,结果不成立,不在运算表达式2。表达式1成立时,运算表达式2。
||:逻辑或,表达式1||表达式2;表达式1成立时,结果成立,不在运算表达式2。表达式1不成立时,运算表达式2
5、单目操作符:
sizeof:操作数的长度,以字节为单位。 列:sizeof(数组名arr)/sizeof(arr[0]);//求数组大小(多少个元素)
++:自增,a++等于a=a+1。 ++a先加一运算后赋值
--:自减,a--等于a=a-1。--a先减一运算后赋值
例:
#include<stdio.h>
#include<stdlib.h>
#include<stdlib.h>
int main()
{
int num1=0;
int num2=0;
int num3=0;
{
int num1=0;
int num2=0;
int num3=0;
num2=num1++;//先将num1赋给num2,后num1加1。即num2=0,num1=1;
num3=++num2;//先num2加1,后将num2值赋给num3。即num2=1,num3=1;
num3=++num2;//先num2加1,后将num2值赋给num3。即num2=1,num3=1;
printf("num1=%d\tnum2=%d\tnum3=%d\n",num1,num2,num3);
system("pause");
return 0;
}
system("pause");
return 0;
}
6、关系操作符与赋值操作符
赋值操作符(=)与关系操作符(==)不可写错,在判断语句中最好将常量数值放在左边,从而便于查找此错误(列:if(1==a)...)