为什么常量和变量的位数不同?
Why there is a difference between the number of bits given for a constant and a variable?
常量浮点数的大小为 8 个字节,而变量浮点数仅为 4 个字节。
#include <stdio.h>
#define x 3.0
int main(){
printf("%d", sizeof(x));
return 0;
}
这也适用于常量 char(给出 4 个字节)
而 char 变量只给出 1 个字节。
我认为这个问题已经在之前的几篇文章中得到了解答。基本思路是:
A) 在 C:
中考虑这个程序
#include <stdio.h>
#define x 3.0 /* without suffix, it'll treat it as a double */
#define y 3.0f /* suffix 'f' tells compiler we want it as a float */
int main() {
printf("%ld\n", sizeof(x)); /* outputs 8 */
printf("%ld", sizeof(y)); /* outputs 4 */
return 0;
}
基本上,double 比 float 具有更高的精度,因此在出现歧义的情况下更可取。因此,如果您声明的常量没有后缀 'f',它会将其视为双精度值。
B) 现在看看这个:
#include <stdio.h>
#define x 'a'
int main() {
char ch = 'b';
printf("%ld\n", sizeof(x)); /* outputs 4 */
printf("%ld", sizeof(ch)); /* outputs 1 since compiler knows what it's
exactly after we declared & initialized var
ch */
return 0;
}
该常量值 ('a') 被转换为其 ASCII 值 (097),这是一个数字文字。因此,它将被视为整数。
请参阅此 link 了解更多详情:
.
常量浮点数的大小为 8 个字节,而变量浮点数仅为 4 个字节。
#include <stdio.h>
#define x 3.0
int main(){
printf("%d", sizeof(x));
return 0;
}
这也适用于常量 char(给出 4 个字节) 而 char 变量只给出 1 个字节。
我认为这个问题已经在之前的几篇文章中得到了解答。基本思路是:
A) 在 C:
中考虑这个程序#include <stdio.h>
#define x 3.0 /* without suffix, it'll treat it as a double */
#define y 3.0f /* suffix 'f' tells compiler we want it as a float */
int main() {
printf("%ld\n", sizeof(x)); /* outputs 8 */
printf("%ld", sizeof(y)); /* outputs 4 */
return 0;
}
基本上,double 比 float 具有更高的精度,因此在出现歧义的情况下更可取。因此,如果您声明的常量没有后缀 'f',它会将其视为双精度值。
B) 现在看看这个:
#include <stdio.h>
#define x 'a'
int main() {
char ch = 'b';
printf("%ld\n", sizeof(x)); /* outputs 4 */
printf("%ld", sizeof(ch)); /* outputs 1 since compiler knows what it's
exactly after we declared & initialized var
ch */
return 0;
}
该常量值 ('a') 被转换为其 ASCII 值 (097),这是一个数字文字。因此,它将被视为整数。 请参阅此 link 了解更多详情: .