关于字符运算有一些不懂的

C语言 码拜 10年前 (2015-05-11) 875次浏览 0个评论
 

#include <stdio.h>
#include <stdlib.h>
#include <limits.h>

int main(void)
{
printf(“%d bits\n”,  sizeof 2147483647*CHAR_BIT);            // 显示32 bits 
printf(“%d bits\n”,  sizeof (-2147483647-1)*CHAR_BIT);     // 显示32 bits 
printf(“%d bits\n”,  sizeof CHAR_BIT);                                 // 显示4 bits     
printf(“%d bits\n”,  sizeof 1);                                                 // 显示4 bits
printf(“%d bits\n”,  sizeof 1*CHAR_BIT);                              // 显示32 bits 
 }
 
能不能解释下第五行是如何产生的32,我实在想不出来,谢谢各位大大
如果有空能不能全部五行解释下,我看看自己是不是分析错了,多谢多谢

6分
你把代码中所有的 CHAR_BIT 换成 8
就懂了
或者你可以把第三个printf 中的 sizeof 删掉
2分
4*8=32,小学生都懂吧
6分
理解sizeof操作符以及数据的默认类型。
sizeof Operator
Yields the size of its operand with respect to the size of type char.
The operand to sizeof can be one of the following:
A type name. To use sizeof with a type name, the name must be enclosed in parentheses.
An expression. When used with an expression, sizeof can be specified with or without the parentheses. The expression is not evaluated.
默认类型
整型->int
浮点型->double
CHAR_BIT是一宏 = 8
6分
printf(“%d bits\n”,  sizeof 2147483647*CHAR_BIT);            // 显示32 bits 
printf(“%d bits\n”,  sizeof (-2147483647-1)*CHAR_BIT);     // 显示32 bits 
printf(“%d bits\n”,  sizeof CHAR_BIT);                                 // 显示4 bits     
printf(“%d bits\n”,  sizeof 1);                                                 // 显示4 bits
printf(“%d bits\n”,  sizeof 1*CHAR_BIT);                              // 显示32 bits 

首先要明明sizeof是运算符,且sizeof的运算符优先级要高于 * (乘法)
另外#define CHAR_BIT 8
以第五个为例
sizeof 1 * CHAR_BIT 实际就是(sizeof(1))*8 =32
sizeof(1) =4

1.由于头文件的存在 这里CHAR_BIT编译时被直接替换为8
2.而且sizeof 的优先级高于 *  
所以为了打字简便而sizeof不加打括号时  编译理解为先取长后乘法 
而不是想象中的先数值类型转换再运算 然后对运算后的字符取长

总结如上 谢谢各位大大的帮助

vb 转c 有些地方会有vb老根 希望大大们助我一力 么么哒


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明关于字符运算有一些不懂的
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!