算术操作符:
+(加)? ? ? ?-(减)? ? ? ? *(乘)? ? ? ? ?/(除)? ? ? ? ? ?? ?%(取模,取余数)
以下代码讲下除以和取模:
#include<stdio.h>
int main()
{
int a = 5 / 2; //除以=商,结果2
int b = 5 % 2;//取模得到的是余数,1
printf("%d\n", a);
printf("%d\n", b);
return 0;
}
位移操作符:
>> (右移)? ? ? ? ?<<(左移)
移位操作符取得是2进制位,代码如下:
#include<stdio.h>
int main()
{
//移(2进制)位操作符
//<<左移操作符 >>右移位操作符
int a = 1;
//整型1占4个字节=32bit 位
//1的2进制序列是怎么表达的 01
//00000000 00000000 00000000 00000001
int b=a << 1;//a向左移1
//00000000 00000000 00000000 00000010(左边丢弃,右边补0)
printf("%d\n", b); //变成了10, 10这个2进制序列如果翻译成十进制序列的话:1x2的一次方 结果就是2
printf("%d\n", a);//此时的a没变还是原来的1,当对a左移右移操作时,a是不变的,除非移完后赋给a
//假设左移2位,00000000 00000000 00000000 00000100 1x2的2次方 结果4
return 0;
}
逻辑操作符
位操作符:
(2进制)位操作
&(按位与)? ? ?|(按位或)? ? ?^(按位异或)
&(按位与)以下代码:
#include<stdio.h>
int main()
{
//(2进制)位操作
// &(按位与)与是并且的意思
// | (按位或)
// ^ (按位异或)
int a = 3; // a b (2进制)位操作
int b = 5; // 3 5 转换的2进制是 011 101
int c = a & b; //2进制怎么转化呢? :假设1111: 二进制: 1 1 1 1
//011(在c中0代表假,非0为真)
//101 (这是3和5的二进制,竖着看01为假 10 为假 11为真)
//001
//1(a&b结果是1)
printf("%d\n", c); // 1*2^3 1*2^2 1*2^1 1*2^0
//
// 8 4 2 1
return 0; //3 和 5 看假设里2+1,4+1 3: 0 0 1 1
// 5: 0 1 0 1
// 假设 13: 1 1 0 1
} // 假设 100: 需要更大的,前面加上1*2^4
? |?(按位或)以下代码:
#include<stdio.h>
int main()
{
//(2进制)位操作
// &(按位与)与是并且的意思
// | (按位或)
// ^ (按位异或)
int a = 3; // a b (2进制)位操作
int b = 5; // 3 5 转换的2进制是 011 101
int c = a | b; //2进制怎么转化呢? :假设1111: 二进制: 1 1 1 1
//011(在c中0代表假,非0为真)
//101 (这是3和5的二进制,竖着看01为假 10 为假 11为真)
//111 (按位或)只要有一个真的 就是真的。
//7(a|b结果是7)
printf("%d\n", c); // 1*2^3 1*2^2 1*2^1 1*2^0
//
// 8 4 2 1
return 0; //3 和 5 看假设里2+1,4+1 3: 0 0 1 1
// 5: 0 1 0 1
// 假设 13: 1 1 0 1
} // 假设 100: 需要更大的,前面加上1*2^4
^(按位异或)以下代码:
#include<stdio.h>
int main()
{
//(2进制)位操作
// &(按位与)与是并且的意思
// | (按位或)
// ^ (按位异或) //不是次方 --是异或
//异或的计算规律:
//对应的二进制位相同,则为0
//对应的二进制位相异,则为1
int a = 3; // a b (2进制)位操作
int b = 5; // 3 5 转换的2进制是 011 101
int c = a ^ b; //2进制怎么转化呢? :假设1111: 二进制: 1 1 1 1
//011 (在c中0代表假,非0为真)
//101 (这是3和5的二进制,竖着看01为假 10 为假 11为真)
//110 (按位异或)
//6(a^b结果是6)
printf("%d\n", c); // 1*2^3 1*2^2 1*2^1 1*2^0
//
// 8 4 2 1
return 0; //3 和 5 看假设里2+1,4+1 3: 0 0 1 1
// 5: 0 1 0 1
// 假设 13: 1 1 0 1
} // 假设 100: 需要更大的,前面加上1*2^4
//
赋值操作符:
=? ?+=? -=? *=? ?/=? ?&=? ?^=? ?|=? ?>>=? ?<<=
#include<stdio.h>
int main()
{
int a = 10;
a = 20; // = 就是赋值 == 就是判断相等
a = a + 10;//1 1和2这俩中写法完全等价
a += 10; //2
a = a - 20;
a -= 20;
a = a & 2;
a &= 2;
//这些操作符叫复合赋值符
//=? ?+=? -=? *=? ?/=? ?&=? ?^=? ?|=? ?>>=? ?<<=
return 0;
}
单目操作符:
!? ? ? ? ? ?逻辑反操作
-? ? ? ? ? 负值
+? ? ? ? ?正值
&? ? ? ? 取地址
sizeof? ? ? 操作数的类型长度(以字节为单位)
~? ? ? ? ?对一个数的二进制按位取反
--? ? ? ? 前置? 后置--
++? ? ? ?前置? 后置++
*? ? ? ? ?间接访问操作符(解引用操作符)
(类型)? ? ?强制类型转换
#include<stdio.h>
int main()
{
int a = 9;
int b = ++a; //先++,后使用
printf("a=%d,b=%d\n", a, b);
//a=10,b=10
return 0;
}
#include<stdio.h>
int main()
{
int a = 9;
int b = a++; //先使用,后++
printf("a=%d,b=%d\n", a, b);
//a=10,b=9
return 0;
}
(类型)? ? ?强制类型转换
#include<stdio.h>
int main()
{
int a = (int)3.14;
printf("%d\n", a); //对3.14进行了强制类型转换,不会进行不必要的报错
return 0;
}
#include<stdio.h>
int main()
{
int a= 10;
if (a >= 10)
{
printf("hehe\n");
}
return 0;
}
#include<stdio.h>
int main()
{
int a= 10;
if (10 == a)//建议反着写
//if (a == a)
{
printf("hehe\n");
}
return 0;
}
一个? =? ?代表赋值,俩个? ==? 代表判断相等
关系操作符
?
?条件操作符(又叫三目操作符)
C语言中唯一三目操作符
exp1?exp2:exp3
若表达式exp1为真则计算exp2
若表达式exp1为假则计算exp3
#include<stdio.h>
int main()
{
//单目操作符
//双目操作符
//三目操作符
//int a = 10;
//int b = 20;
//a + b; // +双目操作符 它有俩个操作数
//c语言中我们要表示真假,0为假,非0为真
//
int a = 10;
printf("%d\n", a); //a就是10 真
printf("%d\n", !a); // !逻辑反操作, 把它变为假,为0
return 0;
}
例如:找出一个较大的数进行输出
int main()
{
int a = 3;
int b = 5;
int m = 0;
m = ((a > b) ? (a) : (b));
printf("m=%d\n", m);
return 0;
}
-? ? ? ? ? 负值
+? ? ? ? ?正值
代码如下:
#include<stdio.h>
int main()
{
int a = -2;
int b = -a;
int c = +3; //+正号都会省略
return 0;
}
sizeof? ? ? 操作数的类型长度(以字节为单位) 代码如下:
#include<stdio.h>
int main()
{
int arr[10] = { 0 };//10个整型元素的数组
int sz = 0;
//10*sizeof(int)=40
printf("%d\n", sizeof(arr));
//计算数组的元素个数
//数组总大小/每个元素的大小 =个数
sz =sizeof(arr) / sizeof(arr[0]);
printf("sz=%d\n", sz);
/*int a = 10;*/
//sizeof 计算的是变量 / 类型所占空间的大小,单位是字节,a占4个字节。
//printf("%d\n", sizeof(a));//4
//printf("%d\n", sizeof(int));//4
//printf("%d\n", sizeof a); //4
//printf("%d\n", sizeof int);int 不加括号错误。
return 0;
}
|