数据操作符

除法想得到小数的结果,必须保证除数和被除数中至少有一个是浮点数。

%(取模操作符)操作符的两个操作数必须为整数,返回的是整除之后的余数。

单目操作符

移位运算符

<<  >>(移位操作符)移动的是二进制,移位操作符的操作数只能是整数。整形二进制表示:原码、反码、补码,整数在C语言中可以存放到int类型的变量中,int类型是4字节,32bit。符号位是0表示整数,符号位是1表示负数。正整数的原码、反码、补码相同,反码(原码的符号位不变,其他位按位取反),补码(反码+1)。

整数在内存中存储的是二进制的补码,移位操作符,移动的是存储在内存中的补码。

逻辑右移(右边丢弃,左边补0)、算数右移(右边丢弃,左边补元符号位),具体使用哪一种,取决于编译器,绝大部分使用的是算数右移。对于移位运算符,不要移动付书位,这个标准是未定义的。

位操作符(他们的操作数只能作用于整数)

& 按位(二进制的位)与,是放在内存中进行计算的,为0则是0,两个为1才为1。

 | 按位或,只要有1则为1,两个为0才是0。

^ 按位异或,相同为0,相异为1,异或是支持交换律的。

赋值操作符

把右边赋值给左边,尤其是应用在连续赋值

创建变量的本质是在内存中开辟一块内存空间

&取地址操作符

二进制、八进制、十六进制,都是数值的表达形式。

地址是指针也是一种编号,存放地址的为指针变量。

*pa中的*则是解引用操作符/间接访问操作符,只有通过pa想找到他指向的对象的时候我们才在前面使用*,即找到a,并可以对a进行赋值。

sizef是操作符不是函数,后面是类型不可以省略小括号。sizeof()内的表达式不会被计算,在编译期间被计算,所有指针类型都是4字节

数组名是数组首元素的地址,但有两个例外:1.sizoef(数组名),数组名表示整个数组,不是首元素的地址。sizoef(数组名)计算的是整个数组的大小,单位是字节。2.&数组名,数组名表示整个数组,不是首元素的地址。&数组名取出的是整个数组的地址。

(类型)强制类型装换

==不能比较两个字符串的内容,实际上比较的是两个字符串首字符地址

逻辑操作符

&和|是针对二进制位的,&&和||只关注真假。

逗号表达式

就是用逗号隔开的多个表达式,从左到右依次执行,整个表达式的结果是最后一个表达式的结果

[]下标引用操作符:操作数:数组名+索引值

结构体变量.结构体成员名

隐式类型转换

C的整型算术运算总是至少以默认整型类型的精度来进行的。为了获得这个精度,表达式中的字符和短整型操作数在使用之前被转换为普通整形,这种转换称为整形提升

整形提升的意义

表达式的整型运算要在CPU的相应运算器件内执行,CPU内整型运算器(ALU)的操作数的字节长度
一般就是int的字节长度,同时也是CPU的通用寄存器的长度。
因此,即使两个char类型的相加,在CPU执行时实际上也要先转换为CPU内整型操作数的标准长
度。
通用CPU(general-purpose CPU)是难以直接实现两个8比特字节直接相加运算(虽然机器指令
中可能有这种字节相加指令)。所以,表达式中各种长度可能小于int长度的整型值,都必须先转
换为int或unsigned int,然后才能送入CPU去执行运算。
b和

如何进行整形提升?

整形提升是按照变量的数据类型的符号位来提升的

(无符号整形提升,高位补0)

算数专换

如果某个操作符的各个操作数属于不同的类型,那么除非其中一个操作数的转换为另一个操作数的类型,否则操作就无法进行。下面的层次体系称为寻常算术转换。

如果某个操作数的类型在上面这个列表中排名较低,那么首先要转换为另外一个操作数的类型后执行运算。算数专换要合理, 否则会有潜在问题存在,比如精度的缺失。

操作符的属性

两个相邻的操作符先执行哪个?取决于他们的优先级。如果两者的优先级相同,则取决于他们的结合性。

 在这就是一个问题表达式,其中可以保证括号的优先级比*号高,但是优先级并不能决定第二个括号就一定比第三个括号先进行,所以结果是不可测的有一定歧义,如果这个表达式无法通过操作符的属性确定唯一的计算路径,那这个表达式就是存在问题的。

%d 用十进制的方式打印有符号整数。

寄存器ebp、esp存放地址,eax、ebx、ecx、edx则有特殊的使用

全局变量不初始化默认是0,局部变化不初始化默认是随机值。全局变量是存放在静态区的,静态区默认创建时为0,而局部变量存放在栈区。

sizeof 计算的是占用内存空间的大小,是不会有负数,既然不会有负数,sizeof返回的类型是size_t类型的。size_t是无符号整型,没有负数,unsigned int。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值