C++操作符,c语言字符操作
Yyds干货库存
表达式评估
表达式求值的顺序部分由运算符的优先级和全面性决定。某些表达式的操作数可能需要在求值期间转换为其他类型。
I隐式类型转换
1.塑料提升
整形:表达式中的字符和短整型操作数在使用前被转换成普通的整形(短整型,char类型转换)。
//无符号char,高位用0填充。
示例:
#包含stdio.h
int main()
{
char a=3;
//3:00000000000000000000000000011
//由于char类型只有8位,所以从后往前取a: 0000011。
char b=127
//127:00000000000000000000001111111
//同上,B: 0111111
//正数与原码有相同的补码。
char c=a b;
///3: 00000000000000000000000000011
//127: 00000000000000000000001111111
//3 127 : 00000000000000000000010000010
//c:10000010
//c整形后:111111111111111111111111111111111111111100010,这是补码。
//c原代码:100000000000000000001111110 3354——-126
printf(%d\n ,c);//打印时获取原代码。
返回0;
}
注:补码存储在存储器中,补码由存储器中的数字计算得出。
printf(%d\n ,c);//打印时获取原代码。
例子
int main()
{
char a=0xb6
short b=0xb600
int c=0xb60000000
If(a=0xb6)//因为表达式中的A是char类型,没有达到整形大小,所以会整形提升。
{
printf( a );//当A被引发时,它不再是原始值,因此不会被打印。
}
if(b=0xb600)
{
printf(0xb 600 );//同上
}
if(c=0xb60000000)
{
printf(0xb 60000000 );//因为C是塑料,所以没有提高。
}
//只打印c。
返回0;
}
//c
int main()
{
char a=1;
printf(%u\n ,suzef(a));//1只计算a的大小。
printf(%u\n ,suzef(a));//4 a是参与运营的意思,所以需要重塑和升级。
printf(%u\n ,suzef(-a));//4同上。
返回0;
}
注:只要C参与表达式操作,就会发生塑形提升。
2.算术转换
如果一个运算符的操作数属于不同的类型,则除非其中一个操作数被转换为另一个操作数的类型,否则无法执行该运算。下面的层次系统称为普通算术变换。
长双份
两倍
漂浮物
无符号长整型
长整型
无符号整数
(同Internationalorganizations)国际组织
如果一个操作数的类型在上表中排名靠后,则应该在执行运算之前将其转换为另一个操作数的类型。(转换为更长/更精确)
二。操作员属性
复杂运算符的评估有三个影响因素:
1.操作员的优先级(执行顺序)
2.运算符的组合(操作方向)
3.是否控制评估顺序(有, ,?,,四个)
两个相邻运算符中的哪一个将首先被执行?
取决于它们的优先级,如果它们具有相同的优先级,取决于它们的组合。
和优先级组合表:
(优先级从上到下逐渐降低)
(L-R表示从左向右绑定,R-L表示从右向左绑定,N/A表示不绑定)
我们掌握了运算符的属性后,就可以处理大部分情况了,但是还是有一些表达式不能确定唯一的计算顺序。
例如,当c=3时,C-C//3 ^ 2=5//2 ^ 2=4
运算符的优先级只能确定减-的运算在-的运算之前,但不能确定运算符左操作数的获取是在右操作数之前还是之后计算。
(如果我们不能通过运算符确定one的计算路径,这个表达式就有问题)
转载请联系作者取得转载授权,否则将追究法律责任。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。