C++ 教程 在线

1859C++ 存储类

std::cout << "Count is " << count << std::endl;

在前面的学习中我们看到的输出没有 std::,而这一节出现了上面的代码。

std 是标准库函数使用的命名空间,是 standard(标准)的缩写。

using namespace std ,它声明了命名空间 std,后续如果有未指定命名空间的符号,那么默认使用 std,这样就可以使用 cin、cout、vector 等。

假设你不使用预处理 using namespace std;,就要加上 std::cin 或者 std::cout

cin 用于从控制台获取用户输入,cout 用于将数据输出到控制台。

cin 是输入流对象,cout 是输出流对象,它们分别可以用 >><<,是因为分别在其类中对相应运算符进行了重载。

1858C++ 修饰符类型

验证 const

#include<iostream>   
using namespace std;

int main()
{
    const float PI = 3.14;
    PI = 3; //尝试修改 PI 的值,将会出现错误提示。
    float radius = 10.0;
    float area = PI * radius * radius;
    float circumference = 2 * PI * radius;
    cout << "area is "<<area <<", circumference is "<< circumference<<endl;
    return 0;
}

更多 C++ const 关键字参考:C++ const 关键字小结

1857C++ 修饰符类型

16 位整数(短整数)的情况下,十进制 50000 就是二进制 11000011 01010000 但在有符号的情况下,二进制最左边的 1,代表这整个数字是负数但是电脑是以补码形式来表示数字的,要获得原本的数字,首先要把整个二进制数 - 11100001101010000 - 1 = ‭1100001101001111‬ 然后,在把答案取反码 not ‭1100001101001111‬ = ‭0011110010110000‬ 把最终答案变成十进制,就是 15536 所以,一开始的二进制数 11000011 01010000,在有符号的情况下代表的就是 -15536

来自网友牢记圣光的笔记:

//上边的例子的二进制数为下边的运行结果,看到二进制就很好理解了!

#include <iostream>
#include <cstdlib>

using namespace std;

int main()
{
    short int i;           // 有符号短整数
    short unsigned int j;  // 无符号短整数

    j = 50000;
    i = j;
    cout <<"i:" <<i<<'\n'<< "j:" << j<<endl;
    char s[40];
    _itoa_s(i, s, 2);
    printf("变量i的二进制数为:%s\n", s);
    _itoa_s(j, s, 2);
    printf("变量j的二进制数为:%s\n", s);
    return 0;
}

结果为:

i:-15536
j:50000
变量i的二进制数为:11111111111111111100001101010000
变量j的二进制数为:1100001101010000

1856C++ 修饰符类型

对于无符号化为有符号的位数运算,采取 N-2^n 的计算方法,n 取决于定义的数据类型 int、short、char、long int 等等,N 为无符号数的数值,例如文中的 N=5000,short 为 16 位,计算方法为 5000-2^16 得到 -15536。

1855C++ 修饰符类型

volatile 往往会用于多线程的修饰,比如:

volatile boolean isNext = false;

Thread A() {
    // 第一个工作
    // isNext = true;
}

Thread B (){
    if (isNext) {
        // 第二个工作
    }
}

这里volatile 就是从来标记isNext, 以确保线程B每次都重新从内存中读取isNext的值,第二个工作一定在第一个工作之后进行。

但是要注意,这里无法保证顺序性,应该编译器编译的时候会重新打乱两个语句的先后顺序,因此做第一个工作和赋值给isNext不一定会按照你代码顺序正常执行。

更多内容可参考:C/C++ 中 volatile 关键字详解