本文旨在用作关于C中隐式整数提升的常见问题解答,特别是由通常的算术转换和/或整数提升引起的隐式提升.
示例1)
为什么这会给出一个奇怪的大整数而不是255?
unsigned char x = 0;
unsigned char y = 1;
printf("%u\n", x - y);
Run Code Online (Sandbox Code Playgroud)
例2)
为什么这会给"-1大于0"?
unsigned int a = 1;
signed int b = -2;
if(a + b > 0)
puts("-1 is larger than 0");
Run Code Online (Sandbox Code Playgroud)
示例3)
为什么更改上例中的类型来short解决问题?
unsigned short a = 1;
signed short b = -2;
if(a + b > 0)
puts("-1 is larger than 0"); // will not print
Run Code Online (Sandbox Code Playgroud)
(这些示例适用于16位或短16位的32位或64位计算机.)
是size_t编译代码的机器的字大小?
用g ++解析,我的编译器视图size_t为long unsigned int.在编译器被调用之前,编译器是否在内部选择某个预处理器宏的大小size_t,或者size_t实际上是stddef.h在字大小内设置的?
还是我偏离轨道?
我看过Python的NumPy包中的数据类型,但我发现数据类型'intp'的描述有点混乱。它的描述是这样的:
如果与C的ssize_t相同,为什么这里使用索引这个词,因为ssize_t用于存储变量的大小?
我知道整数数据类型占用 2 或 4 个字节的内存。我想知道如果int数据类型变量值的值小于那么空间是否被浪费了?
#include <stdio.h>
int main(void)
{
int a=1;
printf("%d\n",a);
}
Run Code Online (Sandbox Code Playgroud)
a 二进制值是 00000001,即 1 个字节,int 数据类型为 a 值分配了 2 个字节的空间。剩余的 1 个字节是否被浪费了?