C++程序设计笔记
机器语言:由二进制代码构成
汇编语言: 将机器指令映射为一些助记词
解释程序:翻译一条语句,计算机执行一条
编译程序:打包执行,计算机全部执行
Java语言是半编译半解释的高级语言
C++是直接翻译成目的语言
0101 ^ 0000 = 0101
0101 ^ 1111 = 1010
0101 ^ 1111 ^ 1111 = 0101
0101 ^ 1111 ^ 0101 = 1111
a = 0101 = 5, b = 1111 = 13
a = a ^ b = 0101 ^ 1111 = 1010
b = a ^ b = 1010 ^ 1111 = 0101
a = a ^ b = 1010 ^ 0101 = 1111
unsigned 3 = 0011
unsigned 4 = 0100
0011 < 0100
加法运算
3 + 4 = 0011 + 0100 = 0111 = 7
5 + 10 = 0101 + 1010 = 1111 = 15
-2 + 4 = 1101 + 1011 = 1001 源码:1001 -1 = 1000 --> 取反 :0111 = 7
unsigned char usc2 = -1; // 1111 1111
printf(“usc2: %d \n”, usc2); // 255
printf(“usc2: %u \n”, usc2); // 255
signed char sc = -1 // 1000 0001 --> unsigned char : 128 + 1 = 129
unsigned char usc = 1 // 0000 0001
if(sc > usc){
}
-1 : 1111 1111
1、小数进制转换:
2^(-1) , 2^(-2), 2^(-3) , … , 2^(-n)
0.3125 二进制转换:
0.3125 * 2 = 0
.625
0.625 * 2 = 1
.25
0.25 * 2 = 0
.5 (取低位,即取小数点后的数进行 * 2运算)
0.5 * 2 = 1
.0
所以0.3125的二进制为: 0.0101
原码,补码,反码
原码
:”符号绝对值“表示编码
2、原码缺点:
1、零的表示不唯一,可用加法和减法,不唯一
2、进行四则运算时符号位需单独处理且运算规则复杂
补码:
0的表示唯一
符号位可做为数值参加运算
减法运算课转换为加法运算
模数:就是一共有多少位数,比如二进制整数n位,模数为2^n
n位二进制小数的模数为2
补数:减去一个数 = 加上他的补数
反码
的计算规则:
1、负整数:
原码符号位不变(仍是1)
其余各位都取反
例如: x = -00110011
[x]原码 = 01110011
[x]反码 = 01001100
2、 正整数的反码就是补码
3、补码的计算规则:
负数的补码 = 反码 + 1
正数的补码 = 原码
这样就可以区分0的正负表示形式, 利用了反码的符号位不变,其他位取反的操作区分,要注意的是,补码操作符号位有参与运算。
如果负数之和得正数,或者正数之和得负数,说明运算结果溢出
整型不能直接赋值给枚举, 但枚举可以直接赋值给整型, 因为枚举是整型的子集。
enum Weekday {
SUN = 7, MON = 1, FEB, WED, THR, FRI, SAT
};
enum Weekday free = SAT;
Weekday res ;
for (int fistday = MON; fistday <= SUN; fistday++) {
res = Weekday(fistday); // 因为firstday 是int 类型, 而res是enum类型,这里相当于强制转换。
if (fistday >= free) {
std::cout << "放假啦!!今天是" << res << endl;
}
}
c++引用一般用作函数参数来进行双向传递
inline 关键字修饰函数,可以使函数调用省去函数调用和返回操作, 直接将函数嵌入调用的地方, 但前提