C++课堂笔记一

C++课堂笔记一

变量和数据类型

  • short, int, long, long long类型的变量,可以表示正数,也可以表示负数,称为有符号的整数类型。
  • unsigned short, unsigned int, unsigned long, unsigned long long类型的变量,只会被看作非负数,称为无符号的整数类型。

  • 有符号整数的表示方法:

    将最左边的位(最高位)看作“符号位”。 符号位为0,则表示是非负数,其绝对值就是除符号位以外的部分; 符号位为1,则表示是负数,其绝对值是除符号位以外的部分取反(0变1,1变0)后再加1.

  • 将一个负整数表示为二进制的方法:

    1. 设置符号位为1
    2. 其余位等于绝对值取反再加1
  • 数据类型的自动转换

    有些不同的数据类型之间是相容的,可以相互赋值。

    int a = 11.34 //11.34被自动转换为11后赋值给a

    字符型–>整形数据

    1
    2
    3
    int k = 'a';//k的内容变为'a'的ASCII码,97

    printf("%d",k);//输出97

    整形–>字符型,但只会留下最右边的一个字节(第0位到第7位),其他字节丢弃

    1
    2
    3
    4
    5
    int n = 98;

    char k = n;//k内容变为98,98是字符'b'的ASCII码

    printf("%c",k);
  • 类型自动转换示例

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    #include <iostream>
    using namespace std;
    int main() {
    int n1 = 1378; //1378的十六进制形式是0x562
    short n2;
    char c = 'a';
    double d1 = 7.809;
    double d2;
    n2 = c+1;//n2变为98 , 97 是'a'的ASCII码
    printf("c=%c,n2=%d\n",c,n2); // 输出c=b,n2=98
    c = n1;// n1是0x562, 0x62 被当做ASCII码赋值给 c,c变为 'b'
    printf("c=%c,n1=%d\n",c,n1); // 输出c=b,n1=1378
    n1 = d1;// d1=7.809, 去掉小数部分后赋值给n1,n1变为 7
    printf("n1=%d\n", n1); // 输出n1=7
    d2 = n1;//d2变为7
    printf("d2=%f\n",d2); // 输出d2=7.000000
    return 0;
    }

常量

  1. 字符型常量和变量都占一个字节,内部存放的是字符的ASCII码,它是一个0—255的整数。

  2. “”也是一个字符串常量,他代表一个空串。

    “a” 和 ‘a’, 前者是只有一个字符的字符串,后者是一个字符。

  3. 符号常量

    #denfine 常量名 常量


输入输出

1
2
3
4
5
6
7
8
9
%d:int变量
%c: char变量
%f:float变量,保留小数点后6
%lf:double变量,保留小数点后6
%x:以十六进制读入或输出整形变量
%lld:long long 变量(64位)
%nd:以n字符宽输出整数,宽度不足时用空格填充(%4d,%12d)
%0nd:以n字符宽输出整数,宽度不足时用0填充(%04d,%012d)
%.nf:输出浮点数,精确到小数点后n位(%.4f,%.3f)

算术运算符和算术表达式

  1. 赋值运算符
1
2
3
4
5
int a;
a=1;
a=a+1;
a=4+a;
a+=b;//等效于a=a+b,但速度跟快(-=,*=,/=,%= 用法类似)
  1. 精度: double(float)>long long>int>short>char
  2. 溢出:
1
2
3
4
5
unsigned int n1 = 0xffffffff;
cout<< n1 <<endl;//输出4294967295
usigned int n2 = n1+3;//溢出
cout<< n2 <<endl;//输出2
//0xffffffff + 3的结果应为0x10000002

两个整数做除法,结果是商,余数忽略(22/5=4)

模运算(求余数 %)

自增运算符“++”:

++a:将a的值加1,表达式返回值为a加1后的值

a++:将a的值加1,表达式返回值为a加1前的值

1
2
3
4
5
6
7
int n1,n2=5;
n2++;//n2变成6
++n2;//n2变成7
n1=n2++;//n2变成8,n1变成7
cout<<n1<<","<<n2<<endl;//输出7,8
n1=++n2;//n1,n2变成9
cout<<n1<<","<<n2<<endl;//输出9,9