我是靠谱客的博主 欢呼柠檬,最近开发中收集的这篇文章主要介绍学习日记2-Linux c语言基础GCC编译过程进制数据类型变量字节数比特数取值范围(注意取值范围不要数据越界)printf中的输出数据类型sizeof():返回类型占用的字节数浮点型在内存中的存储形式((-1)^S*E*2^M)常量和变量数据类型转换强制数据类型转换的注意点类型隐式转换C语言运算符算术移位,逻辑移位和循环移位,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

GCC编译过程

1.预处理(preprocessing):gcc -Wall -E 1.c -o 1.i 将源程序文本预处理为被修改的源程序文本

2.编译(compilation):gcc -Wall -S 1.i -o 1.s 将修改的源程序文本编译为汇编程序文本

3.汇编(Assembly):gcc -Wall -c 1.s -o 1.o 将汇编程序处理为可重新定位目标程序(2进制)

4.链接(Linkling):gcc -Wall -g 1.o -o 1 处理为可执行程序(二进制)

进制

1. 二进制→八进制:三个一组 (八进制开头用0)

2.二进制→十六进制:四个一组(开头0x为16进制数)

注:

3.符号位为1表示负数 0为正数

4.负数用补码存储,正数补码,反码,原码一样

(为什么用补码存储?例:6-5可以直接表示为6+(-5)的补码)

5.反码:符号位不变,其余位取反(例:10110010-11001101)

6.补码:反码+1(例:11001101-11001110)

数据类型

1.基本类型(整型,字符型,实型,枚举型)

2.构造类型(数组,结构体struct,共用体union)

3.指针类型

4.空类型 void

变量字节数比特数取值范围(注意取值范围不要数据越界)

类型字节数比特数取值范围
signed int432-2^31~2^31 -1
unsigned int4320~2^32 -1
signed short216-2^15~2^15 -1
unsigned short2160~2^16 -1
long int432-2^31~2^31 -1
unsigned long int4320~2^32 -1
float432有效数字6-7
double864有效数字15-16
long double1664有效数字18-19
signed char18-2^7~2^7 -1
unsigned char180~2^8 -1

printf中的输出数据类型

%hd (短整型)  %d(整型) %c(字符型) %u(无符号型) %f(对应浮点型)%e(指数型)

sizeof():返回类型占用的字节数

浮点型在内存中的存储形式((-1)^S*E*2^M)

1.float

S(符号位)1bitE(8bit)M(23bit)

2.double

S 1bitE 11bitM 52bit

常量和变量

1.常量:程序运行期间不发生变化的量(字符串常量,标识常量等)

2.变量的命名规则:

由数字 字符 _ 组成

第一个字符不能是数字

不能用关键字 int char等

3.变量说明形式:<存储类型><数据类型><变量名>

4.变量初始化的一般形式:<存储类型><数据类型><变量>=<表达式>

数据类型转换

1.显示的数据类型转换一般形式(强制转换):(数据类型名称)<表达式> b=(int)(a+b+c)

2.隐式转换:char pp=86; int aa=pp;(直接赋值)

注:如果把取值范围大的赋值给取值范围小的可能会发生截断现象

例:int a=855; char b=a;(会发生截断,char只能保存8个bit)

强制数据类型转换的注意点

1.转换符后面表达式如存在复杂运算,要用小括号括起来。

2.它是一种不安全的转换,一般将高级数据类型转换为低级数据类型,会丢失数据精度。

3.不改变表达式变量的数据类型和其值。

类型隐式转换

1.+,-,*,/运算的两个数有一个为float或double,结果为double。

2.若int与float或double进行运算,先将int和float转换为double,然后运算结果为double型。

3.char与int进行运算,就是把字符的ASCII码与整型数据进行运算。

4.两个int相除,不管是否有余,结果为整型(5/10结果为0

5.强制类型转换的一般形式为(类型名)(表达式)将表达式整体的输出结果转换,若写成(int)x+y,则是将x先转换为整型,再与y相加。

例:

double p=5/10 结果为0(5和10都是整型,结果不管有无余必为整型)

5.0/10的输出结果为0.5(5.0是floa型,结果必为浮点double)

(float)(5/10)输出结果为0.00(5和10为整型,结果为整型0转化为浮点型0.00)

(float)5/10输出结果为0.5(先将5转化为浮点型,所有输出结果为浮点型0.5

C语言运算符

1.+,-,*,/,%(取模/求余),++(增1),--(减1)。

注:++i和i++的区别:符号在前面会先运算在返回值

例:

int i=0;

i++; 

printf("%dn",i);

printf("%dn",i++);

++i;

printf("%dn",i);

输出分别是 1,1,3

将第二个输出换成printf("%dn",++i);

则输出为 1,2,3

2.关系运算符

> ,>=,<,<=,==,!=(主要用于判断循环条件)

3.逻辑运算符

!逻辑反

&& 逻辑与 (有0则0)

|| 逻辑或(有1则1)

4.位运算符

~ 位逻辑反 1111~0000

& 位逻辑与 101010&100000 →10000

|  位逻辑或 1011 | 0100 →1111

^ 位逻辑异或 (相同为0,不同为1,和0000异或是不变。和1111异或是取反)

>> 右移位 11101010>>1 :11110101(符号位不变,正0负1)注意有无符号位,有符号位就要补符号位,无符号位补0即可

<< 左移位 11101010<<1 :  11010100 (后面补0)

注:右移也可以做为除法,左移位是乘法

5.赋值复合运算符

a+=b(a=a+b),其余同理。。。。。

6.逗号运算符

从左到右依次运算,返回最后一个表达式的值。

算术移位,逻辑移位和循环移位

1.算术移位(有符号位的移位,要补符号位)

2.逻辑移位(无符号位的移位)

3.循环移位(x<<n | x>>(16-n))

4.求2的n次方(1<<n)

最后

以上就是欢呼柠檬为你收集整理的学习日记2-Linux c语言基础GCC编译过程进制数据类型变量字节数比特数取值范围(注意取值范围不要数据越界)printf中的输出数据类型sizeof():返回类型占用的字节数浮点型在内存中的存储形式((-1)^S*E*2^M)常量和变量数据类型转换强制数据类型转换的注意点类型隐式转换C语言运算符算术移位,逻辑移位和循环移位的全部内容,希望文章能够帮你解决学习日记2-Linux c语言基础GCC编译过程进制数据类型变量字节数比特数取值范围(注意取值范围不要数据越界)printf中的输出数据类型sizeof():返回类型占用的字节数浮点型在内存中的存储形式((-1)^S*E*2^M)常量和变量数据类型转换强制数据类型转换的注意点类型隐式转换C语言运算符算术移位,逻辑移位和循环移位所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(46)

评论列表共有 0 条评论

立即
投稿
返回
顶部