首页 > 编程语言 >C++学习笔记十一:数据类型的转换

C++学习笔记十一:数据类型的转换

时间:2023-12-14 15:56:23浏览次数:39  
标签:std cout int double 数据类型 unsigned 笔记 C++

一个表达式里的所有变量应该具有相同的类型。

上溢和下溢(overflow and underflow):

1.隐式转换(implicitly): 编译器自动进行。总是把占用内存小的数据类型转化为占用大的数据类型。

int类型转换为double

double price { 45.6 };
int units {10};
auto total_price = price * units; // units will be implicitly converted to double
std::cout << "Total price : " << total_price << std::endl;
std::cout << "sizeof total_price : " << sizeof(total_price) << std::endl;

int类型转换为unsigned int类型,赋负值后存入垃圾值。

int a {20};
unsigned int b {23};
auto c = a + b;
c = -123;
std::cout << c << std::endl; //reuslt:4294967173

窄转换(narrow conversion): 不同变量类型的赋值会导致窄转换导致精度丢失。

int x;
double y {45.44};
x = y; // double to int
std::cout << "The value of x is : " << x << std::endl; // 45
std::cout << "sizeof x : " << sizeof(x) << std::endl;// 4

 

2.显式转换(explicit conversion)

static_cast<type>(Variable):编译器会检查转换是否兼容

double x { 12.5 };
double y { 34.6 };
int sum = x + y; 
std::cout << "The sum  is : " << sum << std::endl;
//Explicity cast : cast then sum up
sum = static_cast<int>(x) + static_cast<int>(y) ;
std::cout << "The sum  is : " << sum << std::endl; //46
//Explicit cast : sum up then cast, same thing as implicit cast
sum =  static_cast<int> (x + y); //47
std::cout << "Sum up then cast, result : " << sum << std::endl;

old style C-Cast: (type)(Variable)

//Old style C-cast
double PI {3.14};
//int int_pi = (int)(PI);
int int_pi = static_cast<int>(PI);
std::cout << "PI : " << PI << std::endl;
std::cout << "int_pi : " << int_pi << std::endl;

 

3.上溢和下溢(overflow and underflow)

比如unsigned char类型的大小是1 Byte, 它可以存储 0~255区间内的数值,如果赋值256导致上溢,赋值-1导致下溢。编译器有时会报warning错误,有时会存入垃圾值或者是出现不易察觉的错误。如果不确定数据类型的范围,建议使用<limits>库来查询。

unsigned char a {255};
a++;
std::cout << a << std::endl;

 

标签:std,cout,int,double,数据类型,unsigned,笔记,C++
From: https://www.cnblogs.com/zspaiprogram/p/17901322.html

相关文章

  • C++(size_t)
    size_t是C++中的一种数据类型,通常用于表示对象的大小或元素的数量。它是一种无符号整数类型,具体的大小依赖于编译器和系统,但通常被设计为能够表示对象的最大可能大小。特点和用途:无符号整数类型:size_t是一种无符号整数类型,因此它只能表示非负的整数值。与sizeof运算......
  • C++ Qt开发:ComboBox下拉组合框组件
    Qt是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍ComboBox下拉组合框组件的常用方法及灵活运用。在Qt中,ComboBox(组合框)是一种常用的用户界面控件,它......
  • C++( std::string::npos)
    std::string::npos是std::string类中的一个静态常量,通常用于表示字符串操作中的特殊值,表示在字符串中未找到匹配的位置。npos是size_t类型的常量,其值在不同平台上可能有所不同,但通常是一个非常大的正整数。在std::string的成员函数中,npos用于表示一个无效或未找到的位置......
  • 利用Docker和CLion在Mac优雅地开发和调试Linux C++程序
    利用Docker和CLion在Mac优雅地开发和调试LinuxC++程序starrymarin计算机主业,间断性健身爱好者,摩托、金融入门​关注他 27人赞同了该文章最近在做一些新的东西,所以学习了一些新的东西,也对旧知识加强了很多,所以终于有东西可以记录一下了。今天先更......
  • Qt/C++视频监控安卓版/多通道显示视频画面/录像存储/视频播放安卓版/ffmpeg安卓
    一、前言随着监控行业的发展,越来越多的用户场景是需要在手机上查看监控,而之前主要的监控系统都是在PC端,毕竟PC端屏幕大,能够看到的画面多,解码性能也强劲。早期的手机估计性能弱鸡,而现在的手机性能不是一般的牛,甚至超越了PC机的性能,所以手机上查看多路监控也就有了硬件基础前提。对......
  • 电路基础笔记1
    电路基础1电流正电荷在电路中的移动方向规定为电流的方向。电流通常用字母“I”表示,单位为安培(简称安),用“A”表示,比安培小的单位有毫安(mA)、微安(μA),它们之间的换算关系为1A=103mA=106μA直流电与交流电直流电是指方向始终固定不变的电压或电流。能产生直流电的电源称为直......
  • C++中的图像处理与变换总结
    个人总结图像加法去噪是对同一场景的多幅图像求平均值,以降低加性随机噪声。随机噪声在不同的图像中是独立的,而场景信息是相同的。因此,通过将多幅图像相加并求平均,可以使场景信息保持不变,而噪声的影响则会减小。这是因为随机噪声的期望值为零,所以多幅图像的平均值会使噪声趋向于零......
  • 【笔记】2023.12.14 树上问题
    笔记2023.12.14:树上问题[Ynoi2004]rpmtdq支配对:\(i_1\leqi_2\leqj_2\leqj_1,dist(i_1,j_1)\geqdist(i_2,j_2)\)时,称\((i_1,j_1)\)被\((i_2,j_2)\)支配,前者就无用了,选到区间只要包含\((i_1,j_1)\)就一定包含\((i_2,j_2)\)。点分治到\(rt\)时,记\(d_x=dis......
  • C++ 快速加载 Dll 里的 API
    最近项目里要重新编写程序加载器,也就是编译出一个可执行文件,在Windows上是.exe为什么要程序加载器?个人理解是,可执行文件大小最好是越小越好,功能都可以由dll文件执行而程序加载器里最重要的是两个win32函数,分别是LoadLibrary和GetProcAddress前者是加载dll并返回i......
  • 阅读笔记《探索需求》
    这是本学期最后一本书了,《探索需求》。第一章讲的是方法论是不够的,主要围绕了三个问题:第一是为什么,因为我们使用的通常都是需求映射图,而不是需求本身,这就是需求要“探索”的原因。人们探索制作映射图,最终得到一张足够接近于实际形态的映射图,并为了一个“现实的”目的把它表达出来......