《cpp程序设计》谭浩强 学习笔记1

目录

 

1.一个程序从编写到最后得到运行结果要经历以下一些步骤

2.数值类型

2.1 整数类型

2.2 原码补码及反码

2.3 移位

2.3.1 左移

2.3.2 右移

2.4 进制表示

2.5 表达式中各数据类型混合计算


1.一个程序从编写到最后得到运行结果要经历以下一些步骤


编译:为了使计算机能执行高级语言源程序,必须先用complier的软件,也称编译程序或
         编译系统),把源程序翻译成二进制形式的“目标程序”,生成.obj文件或者.o文件

   作用:进行语法检查和此法检查

连接:在改正所有的错误并全部通过编译后,得到一个或多个目标文件。此时要用系统提供的“连接程序(
        linker)”将一个程序的所有目标程序和系统的库文件以及系统提供的其他信息连接起来,最终形成一个可执行的二进制文件,它的后缀是.exe,是可以直接执行的。

《cpp程序设计》谭浩强 学习笔记1_第1张图片

2.数值类型


2.1 整数类型

在整数类型中,是以补码形式存储的。

《cpp程序设计》谭浩强 学习笔记1_第2张图片

2.2 原码补码及反码

1.可以看到正数的原码 与 其反码补码相同
2.负数的原码最高位为1
3.负数的反码: 符号位不变,其余各位按位取反
4.负数的补码:在其反码的基础上+1
5.0的补码为0000,0000,-128为1000,0000

2.3 移位

2.3.1 左移

规则:
右边空出的位用0填补
高位左移溢出则舍弃该高位。
计算机中常用补码表示数据:
数据 127,补码和原码一样:0111 1111。


左移一位: 1111 1110   -> 这个补码对应的原码为:1000 0010  对应十进制:-2
左移二位: 1111 1100   -> 这个补码对应的原码为:1000 0100  对应十进制:-4
左移三位: 1111 1000   -> 这个补码对应的原码为:1000 1000  对应十进制:-8
左移四位: 1111 0000   -> 这个补码对应的原码为:1001 0000  对应十进制:-16
左移五位: 1110 0000   -> 这个补码对应的原码为:1010 0000  对应十进制:-32
左移六位: 1100 0000   -> 这个补码对应的原码为:1100 0000  对应十进制:-64
左移七位: 1000 0000   -> 这个补码对应的原码为:1000 0000  对应十进制:-128
左移八位: 0000 0000   -> 这个补码对应的原码为:0000 0000  对应十进制:0
 
 

注:
原码到补码的计算方式:取反+1,
补码到原码的计算方式:-1再取反。
 
 
 
数据-1,它的原码为1000 0001,补码为1111 1111

左移一位: 1111 1110   -> 这个补码对应的原码为:1000 0010  对应十进制:-2
左移二位: 1111 1100   -> 这个补码对应的原码为:1000 0100  对应十进制:-4
左移三位: 1111 1000   -> 这个补码对应的原码为:1000 1000  对应十进制:-8
左移四位: 1111 0000   -> 这个补码对应的原码为:1001 0000  对应十进制:-16
左移五位: 1110 0000   -> 这个补码对应的原码为:1010 0000  对应十进制:-32
左移六位: 1100 0000   -> 这个补码对应的原码为:1100 0000  对应十进制:-64
左移七位: 1000 0000   -> 这个补码对应的原码为:1000 0000  对应十进制:-128
左移八位: 0000 0000   -> 这个补码对应的原码为:0000 0000  对应十进制:0

 
可以看出127和-1的结果完全一样。移位操作与正负数无关,它只是忠实的将所有位进行移动,补0,舍弃操作。

2.3.2 右移

规则:
左边空出的位用0或者1填补。正数用0填补,负数用1填补。注:不同的环境填补方式可能不同;
低位右移溢出则舍弃该位。

1、127的补码:0111 1111
右移一位: 0011 1111   -> 原码同补码一样  对应十进制:63
右移二位: 0001 1111   -> 原码同补码一样  对应十进制:31
右移三位: 0000 1111   -> 原码同补码一样  对应十进制:15
右移四位: 0000 0111   -> 原码同补码一样  对应十进制:7
右移五位: 0000 0011   -> 原码同补码一样  对应十进制:3
右移六位: 0000 0001   -> 原码同补码一样  对应十进制:1
右移七位: 0000 0000   -> 原码同补码一样  对应十进制:0
右移八位: 0000 0000   -> 原码同补码一样  对应十进制:0
2、-128的补码:1000 0000
右移一位: 1100 0000   -> 这个补码对应的原码为:1100 0000  对应十进制:-64
右移二位: 1110 0000   -> 这个补码对应的原码为:1010 0000  对应十进制:-32
右移三位: 1111 0000   -> 这个补码对应的原码为:1001 0000  对应十进制:-16
右移四位: 1111 1000   -> 这个补码对应的原码为:1000 1000  对应十进制:-8
右移五位: 1111 1100   -> 这个补码对应的原码为:1000 0100  对应十进制:-4
右移六位: 1111 1110   -> 这个补码对应的原码为:1000 0010  对应十进制:-2
右移七位: 1111 1111   -> 这个补码对应的原码为:1000 0001  对应十进制:-1
右移八位: 1111 1111   -> 这个补码对应的原码为:1000 0001  对应十进制:-1
常见应用
左移相当于*2,只是要注意边界问题。如char a = 65; a<<1 按照*2来算为130;但有符号char的取值范围-128~127,已经越界,多超出了3个数值,所以从-128算起的第三个数值-126才是a<<1的正确结果。
而右移相当于除以2,只是要注意移位比较多的时候结果会趋近去一个非常小的数,如上面结果中的-1,0。

2.4 进制表示

  十进制:正常书写 ;其中长整形后加L或者l,321L

  八进制:常数开头加数字0;

  十六进制:常数开头加数字0和字母X

2.5 表达式中各数据类型混合计算

《cpp程序设计》谭浩强 学习笔记1_第3张图片

你可能感兴趣的:(c++,工具书)