1.数据转换
一个操作数的类型 | 另一个需要转换为 |
long double | long double |
double | double |
float | float |
char signed char unsigned char short unsigned short | 值在int范围内就转换为int, 否则转换为unsigned int. |
unsigned long | unsigned long |
long | 类型为unsigned int,且long可以表示unsigned int中的所有值,就转换为long。 否则两个操作数都转换为unsigned long. |
long | long |
Principle:
1)设计两个不同的浮点数类型,低精度转换为高精度。
2)操作涉及一个整数和一个浮点数,则整数提升为浮点数。
3)操作设计到混合的整数类型,取值范围小的转换为取值范围大的。
4)操作涉及枚举类型,则把它们转换为合适的整数类型。
#include<iostream>
#include<limits>
#include<stdlib.h>
#include<iomanip>
using namespace std;
int main() {
//显示强制转换
double value1=10.5;
double value2=15.5;
int whole_num1=static_cast<int>(value1) +static_cast<int>(value2);//25
int whole_num2=(int)value1+(int)value2;//25
/********确定类型********/
/**
* 返回占用的字节数
*
* char 1
* short 2
* int 4
* long 4
* float 4
* double 8
* long double 8
*/
cout << sizeof(int)<<endl;
/***********数值上下限************/
//头文件<limits>
cout << std::numeric_limits<double>::min() << endl;
cout << std::numeric_limits<double>::max() << endl;
//也可以继承C语言的的头文件中的宏来定义,<climits>头文件中的INT16_MIN
//以上都是在编译器在代码中用对应的数字替换字面量的符号。
//在运行期间访问类型的上下限最好使用runtime_limits<>
int number=0;
int radom=0;
char ch='Y';
//控制整个程序的循环和结束
while(ch=='Y' || ch=='y')
{
cout<<"请输入你要猜的价格:\n";
cin>>number;
cin.clear( );
cin.ignore( std::numeric_limits<std::streamsize>::max( ), '\n' );
srand(time(NULL));
radom=rand()%1000+1;
if(radom==number)
cout<<"你猜对了,要继续吗?(Y/N)\n";
else
{
//当没有猜对时,继续猜,并给与提醒
while(radom!=number)
{
if(number>radom)
cout<<"你输入的价格偏高"<<endl;
else
cout<<"你输入的价格偏低"<<endl;
cout<<"请输入你要猜的价格:"<<endl;
cin>>number;
//读到非法字符后,输入流将处于出错状态,
//为了继续获取输入,首先要调用clear函数
//来清除输入流的错误标记,然后才能调用
//ignore函数来清除输入缓冲区中的数据。
cin.clear( );
//numeric_limits<streamsize>::max( ) 返回缓冲区的大小。
// ignore 函数在此将把输入缓冲区中的数据清空。
cin.ignore( std::numeric_limits<std::streamsize>::max( ), '\n' );
}
}
cout<<"你猜对了,"<<"要继续吗?(Y/N)\n";
cin>>ch;
}
system("pause");
/***************按位运算符*******************/
/***************移位运算符*******************/
/**十进制数: 0100 0000 0000 0011
* 左移一位: 0100 0000 0000 001100(左边两位舍弃)
*/
int number2=10;
number2 >>= 2;
//等价于
number2 = number2 >> 2;
cout<<(number2<<2)<<endl;
/**********************位运算***********************/
unsigned long red =0xFF0000UL;
unsigned long white =0xFFFFFFUL;
}