将大数字类型转换为较小的类型
Casting a large number type to a smaller type
我仔细看了一下周围,没有找到类似的问题,所以如果以前有人问过这个问题,我很抱歉。
我只是玩弄类型和数字,我想知道是否可以保证以下行为。如果我声明两个变量为
unsigned char BIT_8 = 0;
unsigned short int BIT_16 = 0xFF01;
,然后执行以下操作(现在忽略C风格强制转换,除非这会影响它?)
cout << "BIT_16: " << BIT_16 << "n";
cout << "BIT_8: " << (int)BIT_8 << "n";
BIT_8 = BIT_16;
cout << "BIT_8 after: " << (int)BIT_8 << "n";
BIT_8 = BIT_16 >> 8;
cout << "BIT_8 after shift: " << (int)BIT_8 << "n";
我得到了输出
BIT_16: 65281
BIT_8: 0
BIT_8 after: 1
BIT_8 after shift: 255
是否保证如果我将16位类型转换为8位类型,前导字节将丢失?还是没有定义,以上结果是运气?
是否保证如果我将16位类型转换为8位类型,前导字节将丢失?
取决于你使用的是有符号类型还是无符号类型(参见4.7§2和§3):
如果目标类型为unsigned,则结果值是与源整数相等于的最小无符号整数(对2^n取模,其中n是用于表示无符号类型的位数)。[注意:在二进制补码表示中,这种转换是概念性的,位模式不会改变(如果没有截断)。]
如果目的类型是带符号的,如果该值可以用目的类型(和位域宽度)表示,则该值不变;否则,该值为实现定义的。
相关文章:
- 当我输入字符类型的数字时,为什么我无法获得整数?
- 正则表达式以匹配数字的重复模式,后跟任何类型的分隔符?
- 你能在 c++ 中将不同的数字类型加在一起吗?
- 输出一个数字,该数字可能是三种类型之一
- 如何用不同的参数类型和数字回调函数
- C/C++ - 用于按顺序打印数字的 sem_t 类型的单个信号量
- typeid.name 返回派生类类型之前的数字
- C++小数点后有 200 位数字的类型?
- 常量整数变量和数字的不同类型推导
- 检测<T>某些非数字类型 T 的 std::numeric::type 的特化
- 随机数字双重类型
- 当数字可能超出C++中特定数据类型的范围时如何处理异常?
- 为什么数字类型只有"to_string()"?
- 如何在数字大于类型 size_t 的最大数量时使用 std::bitset
- C++从文件中读取不同类型的数据,直到有一个以数字开头的字符串
- 从 std::stringstream 读取uint8_t为数字类型
- 如何检查 stdin 中的数字是否小于给定类型的数字限制
- 创建一个带有限制的数字数据类型,一个介于 -10 和 10 之间的整数
- 无符号窄字符类型数字表示
- c++中对包含双精度类型数字的数组进行排序的最快方法是什么?