| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> C++知识库 -> C语言学习记录——?? 操作符(2) -> 正文阅读 |
|
[C++知识库]C语言学习记录——?? 操作符(2) |
sizeof——计算字节大小。可以括号里放变量,也可以放类型。计算变量可以省括号,类型不可以省。假如sizeof括号里放入一个赋值的式子,式子并不实际计算,计算的值仍然是按照被赋值变量的类型来计算,比如int?b = 0;short a = 11;b = a - 6.结果仍然为4.并且b的值仍为0,没有变成a-6的值? ~? ? ?对一个数的二进制按位取反 假如a是0,按位取反,得到全部都是1的二进制数,但是这是补码,要打印的话则是打印原码,转换过来就是-1.~之后也可以放括号。 前后置++ -- int a = 3 printf("%d \n", ++a)这样打引出4.如果++a,就是先打印出3,然后a再加1,再次打印的话,结果就是4 *? ? ?间接访问操作符 解引用操作。 (类型)强制类型转换 int a = (int) 3.14 关系操作符 > >= < <= != == 逻辑操作符 &&? ? ? ? ? 逻辑与 ||? ? ? ? ? ? ? 逻辑或 &&? ? 两者都为真,则为真,打印1. ||? ? ? ? 有一为真,则为真,打印1. 条件操作符 语句1?? ?语句2:语句3 语句1是否为真,为真就是真,。结果是表达式2的值;为假,则表达式3的值是结果 int main() { ? ? int a = 34; ? ? int b = 5; ? ? if(a > b) ? ? ? ? ? ? printf("%d\n", 3); ? ?? ? ? else? ? ?? ? ? ? ? printf("%d\n", -3); ? ?? ? ? b = (a > b? 3 : -3);或者这样写代码 ? ? return 0; } 再者可用于比较大小 int main() { ? ? int a = 10; ? ? int b = 20; ? ? int max = 0; ? ? if(a > b) ? ? max = a; ? ? else ? ? max = b; ? ? max = (a > b? a : b); ? ? return 0; } 逗号表达式 同逗号隔开的多个表达式。从左到右依次执行,整个表达式结果是最后一个表达式的结果 int a = 1; int b = 2; int c = (a > b, a = b + 10, a, b = a + 1); 最后c等于13. 如果最后是一个判断语句,为真则整个表达式为真,为假则整个表达式为假。 下标引用、函数调用、结构成员 下标引用操作符 声明数组a[10] = { 0 },[]就是下标引用操作符,此时a[2] = 1,那么操作数就是数组名a和索引值2. 函数调用操作符 定义了get_max函数,声明a和b的值,然后int?max = get_max(a , b),()就是操作符。操作数是get_max,a,?b 结构成员 ??? struct Stu { ? ? char name[20]; ? ? int age; ? ? char id[20]; }; int main() { ? ? int a = 10; ? ? struct Stu s1 = {"张三", 20, 20123123}; ? ? struct Stu* ps = &s1; ? ? printf("%s\n", ps->name); ? ? printf("%d\n", ps/>age); ? ? return 0; } 一个简单的小程序 表达式求值 表达式求值的顺序一部分是由操作符的优先级和结合性决定。同样,有些表达式的操作数在求值过程中可能需要转换为其他类型。 隐形类型转换?????? ??????c的整型算术运算总是至少以缺少整型类型的精度来进行的。 为了获得这个精度,表达式中的字符的短整型操作数在使用之前被转换为普通整型,这种转换为整型提升。 ?整型提升是按照变量的数据类型的符号位来提升的。 char a = 3; char b = 127; char c = a +b; 结果是-126.尽量写详细一点 char a = 3; char b = 127; char c = a +b; 3对应的二进制数,由于是char类型,那就只能8位,所以截断前面的,剩下00000011.同理,127就会剩下01111111.但是当相加时,CPU内整型计算器(ALU)的操作数的字节长度一般为int的字节长度,所以需要补到32位二进制数字。相加之后等于10000010,补成32个,1为符号位,所以11111111111111111111111110000010,这是补码,要得到原码,符号位不变,10000000000000000000000001111110,结果就是-126. 算术转换 如果某个操作符的各个操作数属于不同的类型,那么除非其中一个操作数的转换为另一个操作数的类型,否则操作就无法进行。下面的层次体系称为寻常算术转换。 long double double float unsigned long int long int unsigned int? int 下面的主动转换为上面的,比如int和double一起运算,int转换为都double 操作符的属性 优先级,结合性,控制求值顺序。两个相邻操作符,优先级如果相同,取决于结合性。不同则看优先级。 优先级不写了 结合性 从右到左计算,从左到右,无结合性 是否控制求值顺序 典型的就是逻辑与,逻辑或,条件操作符?:,以及逗号表达式。逻辑与,前面为假,那么就不需要算之后的了,这样就是控制求值顺序了 当知道所有后,所有的表达式都可以找到顺序,找不到就是本身表达式错了 比如a*b + c*e + f*g? ? ? ? c + --c,一些无法按照操作符的属性计算,没有唯一的计算路径,不同编译器也不同结果。 结束。 |
|
C++知识库 最新文章 |
【C++】友元、嵌套类、异常、RTTI、类型转换 |
通讯录的思路与实现(C语言) |
C++PrimerPlus 第七章 函数-C++的编程模块( |
Problem C: 算法9-9~9-12:平衡二叉树的基本 |
MSVC C++ UTF-8编程 |
C++进阶 多态原理 |
简单string类c++实现 |
我的年度总结 |
【C语言】以深厚地基筑伟岸高楼-基础篇(六 |
c语言常见错误合集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 9:13:11- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |