学习目标:
各种各样的操作符
学习内容:
遗忘内容:
(1)想要用除法算出小数,需要把被除数和除数写成小数形式。例如:float a=3.0/2.0;
(2)1字节=8位.
64位编译器中各个变量的大小
char :1个字节
char*(即指针变量): 8个字节
short int : 2个字节
int: 4个字节
unsigned int : 4个字节
float: 4个字节
double: 8个字节
long: 8个字节
long long: 8个字节
unsigned long: 8个字节
原码反码补码:
正整数的原码、反码、补码是相同的。负整数的原码、反码、补码需要计算。
例如:因为整形是4字节=32比特,所以5的原码(反码、补码都)是00000000000000000000000000000101,其中第一位的0表示正(同理第一位如果是1,就表示负)。
整数在内存中储存的是补码的二进制,也就是说用移位操作符是在补码上进行操作。
打印的是原码。
-5的补码
左移操作符:向左移几位就在右边补几个0。
先一步步运算得到-5的补码,然后在补码上进行操作,最后把补码变为原码打印
右移操作符:
位操作符:
位操作符都是在二进制数上进行操作。
按位与:同1为1,有0为0.
按位或:同0为0,有1为1.
按位异或:相同为0,相异为1。相同的数异或为0;0与任意数异或为本身。
例:a^ a=0;0^a=a。
赋值操作符:“=” 就是普通的赋值
复合赋值符:
单目操作符:
!0表示真
!非零数表示假
sizeof()的括号内如果有表达式,虽然可以运行,但是表达式不生效
例:
~:按位取反。
这里解释一下0的原码反码补码:
0的原码反码和补码:0分为+0和-0。+0就当作整数,三码相等;-0的原码是全零,反码是全1,补码是全1加1,第33位是1,剩下32位都是0,但是溢出了,所以只取那32位的0。
提问:为什么while(~scanf(“%d”,&n))可以终止循环?
答:因为scanf正常的返回值是输入符号的个数,如果输入失败会返回EOF,EOF本质上是数字-1,-1的补码是111…111(32个),全是1按位取反就得到000…000(32个),就是数字0,所以循环终止。
++a;a++;–a;a–的区别和意义:
逻辑操作符&&和||:
最后运算的结果为a=1,b=2,c=3,d=4
最后运算的结果为a=2,b=2,c=3,d=4
条件操作符
逗号操作符:
用逗号隔开多个表达式,从左到右依次执行各个表达式
整型提升:不足32比特位的变量补充至32位,补充的数字与原来的最高位相同。
例如:
算术转换:为了完成操作,把变量类型转化成高等级类型(比如无符号变量编程有符号变量)。大概是这个意思忘了看初级c13视频。
学习时间:
提示:这里可以添加计划学习的时间
例如:
- 周一至周五晚上 7 点—晚上9点
- 周六上午 9 点-上午 11 点
- 周日下午 3 点-下午 6 点
学习产出:
提示:这里统计学习计划的总量
例如:
- 技术笔记 2 遍
- 优快云 技术博客 3 篇
- 习的 vlog 视频 1 个