C++ 操作符,c语言字符操作
Yyds干货库存
算术运算符-*/%
加法、乘法、除法(商)、除法(余数)
1:使用/(商运算符)时,一般是这样的。
#包含stdio.h
int main()
{
int a=3/5;
printf(%d\n ,a);
返回0;
}
//结果:0
如果要找到小数点后的数字,必须满足数据、数字和打印类型的准确性。比如:
#包含stdio.h
int main()
{
双a=6.0/5.0;//这两个数字中至少有一个必须是浮点数
//当两个数都是整数时,无论数据类型是int还是double,整数都是1。
printf(%lf\n ,a);//请注意,这不是%d
返回0;
}
结果:1.200000
2.%模运算符取余数。它的两个操作数只能是整数。
#包含stdio.h
int main()
{
int a=6% 4;
printf(%d\n ,a);
返回0;
}
移位运算符
左移运算符右移运算符
A 0010 b 1000(显示在后面)
图中的意思是将A的二进制位左移两位。
a=1010 b=0010
总结:左移运算符:左边舍弃几个位,右边加几个零。
向右移动运算符:
算术右移:把丢弃的右边放到左边。
逻辑右移:舍弃右边的几个位,在左边加几个零。
(对有符号数字使用算术右移,对无符号数字使用逻辑右移)
展开:
(计算机存储以二进制补码的形式存储)
正整数的原码,补码,补码都是一样的。
负整数的补码是反转其原始代码的无符号位并加1。
其实整数的二进制表示有三种:原码、补码、补码。
原码:直接按照数值书写的二进制序列。
逆码(针对负数):原码的符号位(二进制的第一位)不变,其他位按位反转。当符号位为1时,表示负号,0表示正号。
补数(用于负数):补数加1。
如果负数-1存储在存储器中,则存储二进制反码。
-1:原始代码:10000000000000000000000000001
逆码:111111111111111111111111111111111111111
补码:1111111111111111111111111111注:对于移位运算符,不要移动负数位数,标准没有定义。例如:
int num=10
num-1;//是错误的。
位运算符
逐位和逐位或逐位异或(它们的操作数必须是整数)
#包含stdio.h
int main()
{
int a=3;
int b=5;
//按(二进制)位和
int c=a
//按位AND是对应的二进制位。只要对应的位有0,新数的二进制就是0,同时也是1。
//3:00000000000000000000000000000011
//5:00000000000000000000000000000101
//c=1:0000000000000000000000000000001
//按(二进制)位或
int d=a b;
//按位“或”是指只要对应的位有1,就是1,两个都是0时才是0。
//3:00000000000000000000000000000011
//5:00000000000000000000000000000101
//d=7:000000000000000000000000000000000111
//按(二进制)位异或
int d=a ^ b;
//相同时对应的位为0,不同时为1。
//3:00000000000000000000000000000011
//5:00000000000000000000000000000101
//e=6:00000000000000000000000000000000110
}
赋值运算符
让你得到一个你之前不满意的值。也就是可以重新分配自己。
=int weight=120//重量
体重=89;//不满意就赋值。
双薪=10000.0;//工资
工资=20000.0;//使用赋值运算符来赋值
赋值运算符可以连续使用,例如:
int a=10
int x=0;
int y=20
a=x=y ^ 1;//进行连续赋值
这个代码是什么感觉?
相同的语义,你看:
x=y ^ 1;
a=x;//这样写更清晰,更容易调试。
2.复合评估者
=-=*=/=%=====^=
int a=10
a=100
A=100//等于a=a 100
A=a 3//等于a=3
注意:=是赋值,==是相等判断。
单目操作者
**
!逻辑运算可以理解为否定和否的意思。
-负值
积极价值
获取地址
sizeof操作数的类型长度(字节)
~一个数的二进制逐位取反(包括符号位)
-前面,后面-
在前后
*间接访问运算符(解引用运算符)
(类型)强制类型转换
***
//!
#包含stdio.h
int main()
{
int flag=5;//标志为真,非零为真。
printf(%d\n ,旗帜);//!把真的改成假的,所以是0。
返回0;
}
//结果:0
***
//sizeof
#包含stdio.h
int main()
{
int a=10
int arr[10]={ 0 };
printf(%d\n ,sizeof(arr));//计算数组的大小,结果:40
printf(%d\n ,sizeof(int[10]));//40,除了数组名,其余都是类型。
printf(“% d \ n”)。sizeof(a));//以字节为单位计算空间的大小。
printf(“% d \ n”)。sizeof(int));//也可以直接计算类型
printf(“% d \ n”)。a)的大小;//计算字符大小时可以省略括号,但不能保存类型。
//所以sizeof是一个运算符,不是函数,函数的括号必须带
}
#包含stdio.h
int main()
{
短a=10
int s=5;
printf(%d\n ,sizeof(s));//4
printf(%d\n ,sizeof(a));//2
printf(%d\n ,sizeof(a=S2));//结果还是2,因为sizeof中的表达式不参与运算。
返回0;
}
#包含stdio.h
void test1(int arr[])
{
printf(%d\n ,sizeof(arr));//(2)//这里是指针,因为传入的地址是取指针,32接收,机器下字节是4。
}
void test2(char ch[])
{
printf(%d\n ,sizeof(ch));//(4)//同样,虽然是char,但它是一个指针变量,32上有4,64上有8。
}
int main()
{
int arr[10]={ 0 };
char ch[10]={ 0 };
printf(%d\n ,sizeof(arr));//(1) 40
printf(%d\n ,sizeof(ch));//(3) 10
test1(arr);
test 2(ch);
返回0;
}
***
~对于正数,所有的原码都是一位一位反转的(包括符号位)。对于负数,它的补码都是逐位反转的(包括符号位)。
//~
int main()
{
int a=-1;
//原代码:100000000000000000000000001
//反码:111111111111111111111111111111111111111111111111111
//Complement:1111111111111111111111111111
//~按(二进制补码)位求反(包括符号位)
//原补:11111111111111111111111111111111
//补码后:00000000000000000000000000000000
int b=~ a;
printf(%d\n ,b);//结果:0
返回0;
}
***
//and-运算符:前缀和-后缀和-
#包含stdio.h
int main()
{
int a=10
int x=a;//先添加一个,然后使用一个。
int y=-a;//先减少一个,再用一个。
int x=a;//首先使用一个,然后添加一个。
int y=a-;//先用A,再减A。
返回0;
}
#包含stdio.h
int main()
{
int a=1;
int b=(a)(a)(a);//Result:由于编译器系统12/10的pit不同,可以有两种结果
printf(%d\n ,b);
返回0;
}
***
*间接访问操作符(解引用操作符)取地址(注意按位AND在a b中,取地址在A中)#include stdio.h
int main()
{
int a=10
Printf(%p\n ,//获取的地址并打印该地址
Int* pa=//Here *表示pa是指针变量,pa用于存储地址。
* pa=20//*间接访问运算符(解引用运算符),将a的值更改为20
printf(%d\n ,a);
返回0;
}***
(类型)强制类型转换
int main()
{
int a=(int)3.14;
返回0;
}
转载请联系作者取得转载授权,否则将追究法律责任。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。