四:二进制与补码
二进制: 数码:0,1
基数:2
二进制数的权展开式:
(101.01) = 1*2²+0*2¹+1*2⁰+0*2⁻¹+1*2⁻²
十进制转化为二进制: 除以二逆向取余法
十进制转化为二进制(小数):乘以二顺向取整法
在汇编中,在数字后加字母B表示二进制数,加字母O表示八进制,加字母D表示十进制,加字母H是16进制
负整数转二进制:先求与该负数相对应的正整数的补码,然后将所有位取反,末尾+1,不够位数时,左边补1
正数的原码、反码和补码相同,负数都不相同
补码:
原码 :也叫符号绝对值
最高位0表示+,1表示-,其余二进制位是该数字的绝对值的二进制位
原简单易懂
加减运算复杂
存在加减乘除四种运算,增加了cpu的复杂度
0的表示不唯一
反码:反码运算便,也没有在计算中应用
移码移码表示数值平移n位,n称为移码量
移码主要用于浮点数的阶码的存储
补码:解决整数的存储,
二进制负数求十进制:将所有位取反,末尾加1,所得数字是该负数的绝对值
五:宏定义和枚举
宏定义
#define 名字 值
注意:结尾无分号,因为不是C的语句
名字可以是各种单词,值可以是各种东西,比如输出控制或字符
在进行,编译之前,会先进性预处理,把这些名字全部替换为值
如果一个宏,有其他宏,会被再次替换
如果宏中的值超过一行,则在最后一行加上一个\
定义宏时,也可以不写值
预定义的宏有如下:
__LINE__
__FILE__
__DATE__
__TIME__
__STDC__
枚举:语法:
enum 枚举类型的标记名{枚举成员列表}; //其中的枚举成员列表是以逗号“,”相分隔,花括号内被称为枚举元素或枚举常量
枚举常量是另外一种类型变量,枚举是一个长量整形值的列表,例如
enum{JAN = 1, FEB, MAR, APR , MAY ,JUN, JUL, AUG, SEP,OCT,NOV,DEV};
//在没有显示说明的情况下,enum类型中第一个枚举名的值为0,第二个为1,依次类推
//如果只制定部分枚举名的值,那么未指定的枚举名的值将依着最后一个指定值向后递增。
//不同枚举中的名字必须互不相同,♂同一枚举中不同的名字可以具有相同的值
//枚举为建立常量值与名字之间的关联提供了一种便利方式。相对于#define来说,优势在于常量值可以自动生成。
此外:虽然可以通过声明变量的形式,但是编译器不检查的这种类型的变量中的存储的值是否是有效值。而枚举变量提供这种检查。