扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
点击查看简单基础版操作符介绍
成都创新互联公司是一家专注于做网站、网站设计与策划设计,岷县网站建设哪家好?成都创新互联公司做网站,专注于网站建设十年,网设计领域的专业建站公司;建站业务涵盖:岷县等地区。岷县做网站价格咨询:18980820575文章目录#include //头文件
_Bool flag = true; //赋值,赋值的选项只有true和false两种选择
_Bool flag = false;
return false; //返回的也只有这两种选项
#includeint main()
{int a = 10;
int b = ++a; //b = 11 a = 11
int c = a + 1; //c = 11 a = 10
return 0;
}
a+1和++a都可以实现打出这个数+1的效果,但是a+1是不会改变a本身的数值的,也就是所是不会作用于自身的
int a = 3;
int* pa = &a;
*pa += 3; //*pa相当于a
printf("%d\n", *pa);
printf("%d\n", a); //因为是作用在a上的值修改,所以可以直接打印a
*(int *)地址——————指针是不能强制转换的,,相当于入室盗窃,不可取
char* p = "abcdef"; //这个是字符串字面量,传进去的是首个元素的地址
#includeint main()
{int a = 3;
int arr[10];
printf("%d", sizeof(a)); //ok
printf("%d", sizeof(int)); //ok
printf("%d", sizeof(arr)); //ok
printf("%d", sizeof(int [10])); //ok
printf("%d", sizeof a); //ok //如果是求变量的大小,可以省略括号
//printf("%d", sizeof int); //error //如果是求类型的大小,则不能省略括号
return 0;
}
😊sizeof的特点
#includeint main()
{int a = 0;
short s = 5;
printf("%d\n", sizeof(s = a + 3)); //a+3是整型4个字节,放在短整型2个字节里面会发生截断
printf("%d\n", sizeof(s)); //sizeof内部的表达式不计算,s未被赋值,依旧是5
return 0;
}
【2】sizeof和数组
😊大小计算
#includevoid test1(int arr[])
{printf("%d\n", sizeof(arr)); //4、8
}
void test2(char* ch[])
{printf("%d\n", sizeof(ch)); //4、8,因为接收的是地址,指针变量的大小要么4要么8,取决是32位还是64位环境
}
int main()
{int arr[10] = {0 };
char ch[10] = {0 };
printf("%d\n", sizeof(arr)); //输出40,计算的是整个数组的大小
printf("%d\n", sizeof(ch)); //输出10,计算的是整个数组的大小
test1(arr);
test2(ch);
return 0;
}
#includestruct book
{ //如何创建一个类型
char name[10];
char author[10];
int price;
};
int main()
{struct book b1 = {"《活着》","余华",45 };
struct book* pb = &b1;
printf("%s %s %d\n", b1.name, b1.author, b1.price);
printf("%s %s %d\n", (*pb).name,(*pb).author, (*pb).price); //用指针
printf("%s %s %d\n", pb->name, pb->author, pb->price);
return 0;
}
#includeint main()
{int a = 3.14; //3.14是浮点型,放到整型里面会丢失数据,但非要放就需要强制类型转换
printf("%d",a); //printf和scanf是以某种格式输出/输入的意思,不需要强制类型转换,已经自身带领隐性的意味了
return 0;
}
5.❤️条件操作符(三目操作符)如果表达式1成立,就输出表达式2的结果,如果表达式1不成立,就输入表达式3的结果
6.❤️位操作符(操作数只能是整数) 6.1 前情提要 【1】进制位操作符,这个位究竟是什么?------二进制位
计算机中有许多进制的位,如常见的二进制、八进制、十六进制等,我们看到的数值往往是以十进制的形式展现的,每一个数值可以用不同的进制表示,如
1111——二进制位 表示的都是一个数。表现形式不同罢了
17——八进制位
15——十进制位
F——十六进制位
而计算机中二进制的表现形式一共有三种:原码、反码、补码
- 原码就是根据数值的大小和正反直接写出的32位或者64位二进制
原码的最高位是符号位,如果是0就表示是正数,如果是1就表示是负数
- 反码就是原码除了符号位,其他位按位取反
- 补码就是反码+1
正数(包括0)的原码、反码、补码相同,负数的则需要计算
内存中存的是补码,所以移位什么的,移的是补码。
打印是按原码来
【3】unsigned和signedunsigned:整数在内存中以二进制的补码存储,最高位为符号位,这个可以实现最高位成为计算位,不是符号位——————无符号位
signed:因为是默认数值存储时有符号位的,所以基本省略掉了——————有符号位
6.2 &按位与对应的二进制位有0,则为0,除非两个数都是1,才为1
6.3 | 按位或对应的二进制位,有1就为1,除非两个数都是0,才为0
6.4 ^按位异或对应的二进制位,相同为0,相异为1
7.❤️移位操作符(操作数只能是正整数)左移操作符:左边抛弃,右边补0
右移操作符:左边用原该位的符号位填充,右边丢弃
int a = 1<<4; //把1向左移动4位的数,赋值给a //左移操作符
int b = 1>>4; //把1向右移动4位的数,赋值给b //右移操作符
int num = 10;
int b = num<<1; //num本身的值没有被改变
8.❤️逻辑操作符&& 逻辑与 ||逻辑或
区分:& 按位与 |按位或
特点(坑点):
&&操作符:左边为假,右边无须计算
||操作符:左边为真,右边无须计算
逻辑操作符可以产生短路的效果
9.❤️逗号表达式形式:表达式1,表达式2,表达式3……表达式n
含义:用逗号隔开的多个表达式
特点:从左向右依次执行,整个表达式的结果就是最后一个表达式的结果
#includeint main()
{int a = 1;
int b = 2;
int c = 0;
if (a = b + 1, c = a / 2, b >0) //依次执行,前面如果有涉及值的修改,也会影响判断部分,真正起到判断部分的,是最后一个表达式,即b>0
{printf("大悲咒");
}
return 0;
}
10.❤️表达式求值✨如何判断计算顺序【注意:相邻的概念】
✨一些问题表达式
虽然通过上述方法可以确定计算顺序,但是这个计算顺序并不是唯一的,下面介绍一些问题表达式
第一种
a* b + c * d + e * f; 优先级只能确定相邻操作符的顺序,无法确定第三个*是否比第一个+早执行
第二种
c + --c; 无法确定c是什么时候准备好的,是在减减前就准备好了
第三种 非法表达式
#includeint main()
{int i = 10;
i = i-- - --i * (i = -3) * i++ + ++i;
printf("i = %d\n", i);
return 0;
}
第四种
#includeint fun()
{static int count = 1;
return ++count;
}
int main()
{int answer;
answer = fun() - fun() * fun(); //只能确定先算乘法,再算减法,但是函数的调用顺序是无法确定的
printf("%d\n", answer);
return 0;
}
😊总结
优先级高并不代表表达式执行顺序优先,就像a+f+bc,它可以是先a+f再加bc,它也可以先a+f再加bc,也可以是bc再加a。
没法确定唯一计算路径的就是问题表达式,我们要通过括号去避免
10.2 类型转换 【1】隐性类型转换为什么会出现隐性类型转换这种情况?
✨因为表达式的整型运算要在CPU的整型运算器里面进行,而里面运算的操作数的字节长度一般是整型的字节长度。
即C语言的整数算术运算默认是以整型类型的精度来进行的
✨但是字符和短整型的字节长度是小于int类型的,为了达到上述所提到的要求,就需要进行整型提升,即在执行运算前,要把把字符类型、短整型转化成int类型或者unsigned int类型后,才送去CPU执行运算操作
隐性类型转换是如何进行的
char a = 1; b和c先被提升为普通整型,然后再执行加法运算
char b = -1;
a = b + c; 执行完加法运算之后,结果将被截断,然后被存储到a中
✨使用场景:某个操作符的各个操作数属于不同的类型
✨解决方法:其中一个操作数的转换为另一个操作数的类型,否则操作(运算)无法进行
- ong double
- double
- float
- unsigned long int
- long int
- unsigned int
- int
✨具体:排名较低的那个类型要首先转换为另外一个操作数的类型后执行运算
就高不就低
✨转换要合理,如果你强行给整型类型赋上一个浮点数,会发生精度的丢失
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流