当您将不在 ASCII 图表上的字符转换为在 C++ 中键入 int 时会发生什么?
What happens when you cast a character that isn't on the ascii chart to type int in C++?
它有自己的值吗?某些字符会使程序崩溃吗?
假设sizeof(char) < sizeof(int)
。对于下面的例子,让我们假设32位整数和2的完全拱形。
将有符号字符或无符号字符强制转换为带符号整数表达式将导致相同的值提升为int。
将无符号char强制转换为未符号int表达式将导致相同的值提升为无符号int。
将有符号的char强制转换为无符号整数表达式可能会根据您对强制转换的看法而产生略微不同的行为。带符号的字符将首先升级为带符号的整数,这包括获得"带符号扩展"以保留任何负值。然后强制转换为unsigned。
后一种情况在塑造和宣传负面价值观时有一个有趣的副作用。
signed char c = 0x7f; // 0x7f expressed as a signed char is 127
unsigned int n = c; // n gets 0x0000007f (127)
signed char c = 0xff; // 0xff expressed as a signed char is -1
unsigned int n = c; // n gets 4294967295 (0xffffffff)
我之所以在上面明确地调用"signed char"与"unsigned char",是因为这个变量:
char c;
可以是有符号的,也可以是无符号的,这取决于编译器决定如何处理它。大多数编译器默认为有符号,但有一个编译器选项可以视为无符号。
我不得不修复一些错误,因为代码认为char的符号错误。
相关文章:
- 向量 <int> a {N, 0} 和 int arr a[N] = {0} 的时间复杂度有什么区别
- "类模板示例<int>;"语句对 C++11 是什么意思?
- int数据类型的指针指向的是什么,如果是一个类的私有数据成员,我们创建了该类的两个对象?
- 是什么导致了这种使用三进制而不是短整型的有符号int到无符号int转换
- 关于int :0有什么特别之处在C++
- C++ 未初始化的本地(非全局)int 数组中的元素类型到底是什么?
- ((int) a) 和 (int(a)) 之间的区别是什么?
- 在 C 和 C++ 中作为函数参数,int **a 和 int a[][] 之间有什么确切的区别
- map<string, int> m= {}; 在C++中是什么意思?
- 有什么方法可以使用 int 变量来完成组件名称吗?
- int x_ 和 int x 在C++中有什么区别
- 行 - " vector<int> used(adj.size(), 0); "是什么意思?
- int** a = new int*[n]();这个函数有什么作用?
- *(int*)&data[18]在这段代码中实际上做了什么?
- 无符号长整型和无符号 int 之间有什么区别,这 2 种类型应该如何在 c# 中封送?
- 使输出流式处理运算符适用于 boost::variant<std::vector<int>、int、double 的正确方法是什么>
- "new int * **[10]"做什么?
- 什么是int(*)[]类型
- 什么是变量均值'int border = borderType & ~BORDER_ISOLATED'?
- 代码中的"vector<<int>vector>&index"是什么意思?