0
点赞
收藏
分享

微信扫一扫

从细节角度出发看待C语言的,数据类型,运算符。

潇湘落木life 2022-01-06 阅读 65

数据类型:关于数据类型各个类型对应不同的标识符:列如

int%d
char%c
double/float/long%f

在这里我们可能会遇到%0.1f的标识符,这表示省略到小数点后一位,列如:5.57变为5.6,其遵循四舍五入原则。

家学习了这么就的C语言可能还有同学不太理解C语言中各种数据(如int ;short;long;float;char等 )的字节吧,那么我们可以用一段代码来表示出来:

#include<stdio.h>
void main()
{
	int a;
	printf("sizeof(char):%d\n", sizeof(char));
	printf("sizeof(short int):%d\n", sizeof(short int));
	printf("sizeof(int):%d,sizeof(a):%d\n", sizeof(int), sizeof(a));
	printf("sizeof(unsigned int):%d\n", sizeof(unsigned int));
	printf("sizeof(long int):%d\n", sizeof(long int));
	printf("sizeof(double):%d\n", sizeof(double));
	printf("sizeof(long double):%d\n", sizeof(long double));
}
//源代码来自书籍《C语言程序设计》;

其中sizeof()函数是用于计算所占字节空间大小,则得出结果为:

但是由于每个调试器不同也会使字节不同,标准的字节还需要自行操纵;


主要字节的个数:

c类型                           32                            64

char                              1                               1

short int                         2                               2

int                                 4                                4

long int                           4                             4

long long int                  8                               8

char*                               4                               8

float                                4                                 4

double                             8                                8

在不同的编译器中可能会有偏差。


简单介绍一下~(按位取反),&(按位与),|(按位或),^(按位异或),<<(按位左移),>>(按位右移):

~x:按位取反,a=~x,a=-(x+1);

5&6:按位与  八位二进制5:0000 0101

                                      6:0000 0110(只有上下都为真才为真)

                                  5&6:  0000 0100=4

5|6:按位或    八位二进制5:0000 0101

                                       6:0000 0110(上下有存在真则为真)

                                   5|6:  0000 0111=7

5^6:按位异或 八位二进制5:0000 0101

                                        6:0000 0110(上下不同为真)

                                      5|6:  0000 0011=3

a==89,a<<2按位左移2位八位二进制89:0101 1001

                                                 a<<2:(01)0110 0100=356;

                                         按位右移a>>2:0001 0110(01)=22;


表达式的运算:对于

表达式1?表达式2:表达式3的解析:        如果表达式1为真则返回表达式2的值如果表达式为假则返回表达式3的值。列如a>b?a:b>c?b:c就等价于a>b?a:(b>c?b:c).


对于逗号的运算实例:

#include<stdio.h>
void main()
{
int a, b, c, d;
b = (a = 2, a * 3, a + 4);
printf("%d\t%d\n", a, b);
c = (a = 3, b = a + 2, b++);
printf(" % d\t % d\t % d\n", a, b, c);
d = (a + 6, a - 1, a /= 2, a * 4);
printf(" % d\t % d\n", a, d);
}


输出结果为:

 


最后使运算符的优先级和结合性:

 以上是本次介绍的全部内容供大家参考。

举报

相关推荐

0 条评论