一、原反补码
- 原码:
原码就是符号位加上真值的绝对值, 即用第一位表示符号(正负,负数为1,正数为0), 其余位表示值.原码是人脑最容易理解和计算的表示方式. - 反码:
正数的反码是其本身负数的反码是在其原码的基础上, 符号位不变,其余各个位取反. - 补码:
正数的补码就是其本身负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)
注意:正数的原反补码都是自身
出现过程:
原码是人脑能直接识别并用于计算的表示方式,我们在计算数据的时候回根据符号位去计算数据(符号位不计入计算),但是计算机进行加减乘除基本运算的时候,如果要去辨别符号位的话就变得很复杂了,而这个时候人们就想出了将符号位也参与运算,这个时候就吹出现了反码。我们知道a-b = a+(-b)这个时候就将减法改变成加法来运算,从而减少了计算机去辨别负数的符号位,解决了减法的问题,但是出现了问题—–>0 我们计算得到结果的时候首位仍为符号位,如果该数为0的话 反码中会出现 +0 -0的区别,但是我们都知道0带符号是没有意义的,这个时候就出现了补码。计算机中数据就是以补码形式存在的。
二、隐式转换
隐式类型转换分三种,即算术转换、赋值转换和输出转换。
- 算数转换:算术运算(加、减、乘、除、取余以及符号运算)时,不同类型数招必须转换成同 一类型的数据才能运算,算术转换原则为:对于所有比int小的类型,包括char, signed char, unsigned char, short, unsigned short,首先会提升为int类型。在进行运算时,以表达式中最长类型为主,将其他类型位据均转换成该类型,int long float double
- 赋值转换:进行赋值操作时,赋值运算符右边的数据类型必须转换成赋值号左边的类型,若右边的数据类型的长度大于左边,则要进行截断或舍入操作。
- 输出转换: 在程序中将数据用printf函数以指定格式输出时,当要输出的盐据类型与输出格式不符时,便自动进行类型转换,如一个long型数据用整型格式(%d)输出时,则相当于将long型转换成整型(int)数据输出;一个字符(char)型数据用整型格式输出时,相当于将char型转 换成int型输出。注意:较长型数据转换成短型数据输出时,其值不能超出短型数据允许的值范围,否则 转换时将出错。
三、计算机系统
-
32位操作系统
char :1个字节(固定)
*
(即指针变量): 4个字节(32位机的寻址空间是4个字节。同理64位编译器)(变化)short int : 2个字节(固定)
int: 4个字节(固定)
unsigned int : 4个字节(固定)
float: 4个字节(固定)
double: 8个字节(固定)
long: 4个字节
unsigned long: 4个字节(变化*,其实就是寻址控件的地址长度数值)
long long: 8个字节(固定)
-
64位操作系
char :1个字节(固定)*
(即指针变量): 8个字节short int : 2个字节(固定)
int: 4个字节(固定)
unsigned int : 4个字节(固定)
float: 4个字节(固定)
double: 8个字节(固定)
long: 8个字节
unsigned long: 8个字节(变化*其实就是寻址控件的地址长度数值)
long long: 8个字节(固定)
四、其他
#pragma
是设定编译器的状态或者是指示编译器完成一些特定的动作。
#define
是预编译指令
sizeof()
是运算符。
网友评论