编译器如何知道是扩展零还是一
How the compiler knows whether to extend zeros or ones?
int main()
{
char c = -1;
unsigned char u = -1;
printf("c = %un",c);
printf("c = %dn",c);
printf("u = %un",u);
printf("u = %dn",u);
}
结果是:
c = 4294967295
c = -1
u = 255
u = 255
当我尝试将其转换为无符号 int 时
由于标志扩展,我得到了c = 4294967295
但是当我尝试将无符号字符转换为无符号 int 时
我得到 u = 255
在第一种情况下,1 扩展了 16 位并打印了该数字
在第二种情况下,扩展 0
。但我的问题是,当编译器要将小数据放入大内存中时,编译器如何检测是扩展零还是一。
无符号数字(例如您的u
(不会进行符号扩展,它们将被扩展为零。 那是因为他们没有征兆! 有符号数字(即有符号整数类型的变量(总是有符号扩展的。 混淆可能来自您最初将-1
分配给无符号类型 - 一旦分配,就不再有符号扩展的可能性。
打印涉及两个步骤。
a( 8 位字符(有符号/无符号(转换为 32 位
b( 32 位值打印为有符号或无符号
所以在步骤 a( 之后 c
相关文章:
- 努力将整数转换为链表。不知道我在这里做错了什么
- 是否可以通过C++扩展强制多个python进程共享同一内存
- 我正在使用嵌套的while循环来解析具有多行的文本文件,但由于某种原因,它只通过第一行,我不知道为什么
- static_assert在宏中,但也可以扩展到可以用作函数参数的东西
- 函数何时会在c++中包含stack_Unwind_Resume调用
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值
- 叮当不知道PTRDIFF_MAX?
- 如何将这个C++哈希表转换为动态扩展和收缩,而不是使用硬设置的最大值
- 扩展光电二极管探测器以支持多个传感器
- 如何在不知道向量大小的情况下输入向量内部的向量?
- 我正在尝试使用 c++ 创建一个货币转换程序,我不知道如何继续
- Python中的for循环与C++有何不同
- 不知道某个东西是否被忽略会引入未定义的行为吗
- 我想知道长双倍和双倍之间的区别
- 我需要知道编译器如何在cpp中使用析构函数
- dll 外壳扩展如何知道要执行的程序位置?
- 英特尔®事务同步扩展新指令 (TSX-NI) 与英特尔 TSX 有何不同?
- 如何确切知道用户何时扩展QTreeView项目
- 编译器如何知道是扩展零还是一
- 如何重命名我不知道扩展名的文件?