目录
一、原码反码补码
计算机中的整数有三种二进制表示方法,即原码、反码和补码。
三种表示方式均有符号位和数值位两部分,符号位用0表示正,用1表示负。
正数的原码、反码和补码都相同。
负整数的三种表达方式存在差异。
原码就是将数值大小转换为二进制数值。
反码就是在原码的基础上符号位不变,数值位取反。
补码就是在反码的基础上+1。
在计算机系统中,对数据处理使用的是补码进行运算,因为使用补码可以将符号位和数值域统一处理。同时,加法和减法也可以统一处理(cpu中只有加法器)。此外,原码和补码可以使用相同的电子线路相互转换,不需要额外的硬件电路。
二、整型提升
整型提升是C程序设计语言中的一项规定:在表达式计算时,各种整型首先要提升为int类型,如果int类型不足以表示则要提升为unsigned int类型;然后执行表达式的运算。
整型提升分为有符号和无符号两种。
1.有符号的:整型提升按照变量被截断时的最高位是什么进行补位的,如果截断后最高位(最左端)数字为1,则在前面补够32位1即可。若最高位数字为0,则在前面补够32位0即可。
2.无符号的:直接在被截断的前面补0即可。
整型提升的意义;CPU寄存器对数据进行计算的时候,表达式各种长度可能小于int长度的整型值,都必须转换为int或者unsigned int,然后送入CPU进行计算 。不同的类型提升的方式不同,在计算和编程的时候需要特别注意整型提升的方式。
三、大小端字节序
大端存储模式:是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中;
小端存储模式:是指数据的低位保存在内存的低地址中,而数据的低位,保存在内存的地地址中。
为什么会有大小端模式之分呢?这是因为在计算机系统中,我们是以字节为单位的, 每个地址单元都对应着一个字节,一个字节为8 bit 。
但是在C语言中除了8 bit的char之外,还有16 bit的short型,32 bit的long型(要看具体的编译器),另外,对于位数大于8位的处理器,例如16位或者32位的处理器,由于寄存器宽度大于一个字节,那么必然存在着一个如何将多个字节安排的问题。因此就导致了大端存储模式和小端存储模式。