(1)二进制、十六进制、八进制
不同进制只是数值不同的表达形式 ,二进制转换十进制省略,从十进制转换到二进制(不断除二取余自下向上将余数从左到右写下来,就转换到二进制);从二进制转换八进制(从左向右每三位按二进制位换算一个八进制位,不够三个直接换算);从二进制转换到十六进制(跟八进制同理,不过是四位二进制转换成一位16进制)一个数字最前面是0X代表是这个数字是十六进制,前面是0就代表是八进制数字。
(2)原码、补码、反码
整数二进制表达形式即以上三种,这三种形式只针对整数,正整数这三者相等,而负整数不相等。源码就是正常二级制的形式,反码是符号位不变,其他所有位按位取反,而补码就是反码+1。符号位众所周知是一段二进制数字中最前面一位,代表这个数字的正负,0代表正,1代表负,故unsigned int类型比较正常int类型多点数据范围,多了2的32次-2的的数据表述的范围。整数在内存中存储二进制数字的补码,CPU中只有加法器,其他算数运算是用加法模拟。原码到补码和从补码到原码都可以通过取反、+1。
(3)移位操作符、位操作符
移动的是内存中存储的二进制位(补码)。1)左移(<<):左边抛弃,右边补0,相当于乘2的几次方,移了几位,乘几次方。2)右移(>>):分为逻辑右移(右边抛弃,左边补0)和算术右移(根据符号位,补符号位的值到左边,右边丢)右移采用哪一种取决与编译器,不同编译器不一样(大部分位算术右移)。
位操作符:&、|、^、~,一共四种,都是双目操作符除了~。&(按位与):有0就为0,都是1才为1;|(按位或):有1就为1,2个0才为0;^(按位异或):对位数字相同就为0,不同为1;~(按位取反):每位都取反。注意:异或操作符特点:1.3^3=0, 0^3=3, 0^n=n(n可以是任何数)3^3^5=5,3^5^3=5(^异或操作符支持交换律)
(4)优先级和结合性
相邻操作符不同优先级高的先执行,优先级相同时结合性说的算。
还有一个问题叫整型提升:未获得整型精度,表达式中字符和短整型操作数在使用之前转换普通整型,这种转换被称为整型提升
a.所有 char
和 short
类型在参与算术运算之前,会被提升为 int
。如果这些类型的值超出了 int
的范围,它们会被提升为 unsigned int
。
b.在一个表达式中,如果包含了不同的整型,比如 char
、short
和 int
,所有的这些小类型都会被提升到 int
,以便进行计算。
算术转换:算术转换是在进行算术运算时,不同数据类型之间的转换规则。C语言会根据操作数的数据类型自动进行转换,以保证运算的结果是正确的。
#include <stdio.h>
int main()
{
char a = 5; // char 类型
short b = 10; // short 类型
int c = a + b; // 整型提升,将 a 和 b 提升为 int
printf("Result: %d\n", c); // 输出 15
float x = 2.5; // float 类型
double y = 3.5; // double 类型
double result = x + y; // x 被提升为 double
printf("Float and double addition: %f\n", result); // 输出 6.0
return 0;
}
操作符学习了解它们的作用以及能够用到哪些地方,以上内容是学习完根据课件和笔记总结成一篇文章,如果有错误,还望你能够指出,谢谢。
标签:int,补码,C语言,学习,二进制,操作符,整型,八进制 From: https://blog.csdn.net/2401_86482932/article/details/143472025