C语言 数据类型

C语言的本质:操作内存

内存:读写速度快、数据掉电丢失

硬件:读写速度慢、数据掉电不丢失

内存分配的最小单位:字节 Byte

数据类型

基本类型

整形、浮点型、枚举类型

构造类型

数组、结构体、共用体

指针类型int*、char* ...
空类型void

整数类型

有符号(signed

无符号(unsigned

备注:不写有无符号时,默认为有符号。有符号数的最高位为符号位(1为负数  0为正数),其他位叫数据位

占用内存空间存储数据的范围
整数类型char字符类型1

无符号:[0,2^8-1]

有符号:[-2^7,2^7-1]

short短整型2

无符号:[0,2^16-1]

有符号:[-2^15,2^15-1]

int整形4

无符号:[0,2^32-1]

有符号:[-2^31,2^31-1]

long长整型4

在32位系统中和int一样 4Byte

在64位系统中和long long一样8Byte

long long长长整型8

无符号:[0,2^64-1]

有符号:[-2^64,2^63-1]

浮点数类型4
空类型8

常量

类型前缀输出占位符例子
整型常量二进制0b0b1010
八进制0%#o0576
十进制%d %ld %lld %hd520
十六进制0x%#x0xAB12
浮点型常量

float

单精度浮点型

%f3.14

double

双精度浮点型

%lf5.26
指数常量%e科学计数法
字符常量%c'A'
字符串常量%s"beijing"
标识常量 宏定义 #define

变量

格式:存储类型  数据类型  变量名;

存储类型:const static extren register volatile auto (局部变量不写存储类型时,默认是 duto)

数据类型:定义变量占用多大的内存空间

数据类型:是一个标识符,要符合标识的命名规范

强制类型转换

强转只是在本次运算中使用其他类型参与运算,不影响变量原来的类型

显示强转

格式 :(新的类型)变量名

隐式强转

运算符

算数运算符+ - * / %(模除 取余)
自增自减运算符++ --
关系运算符< > <= >= == !=
逻辑运算符&& ||  !
位运算符& | ^ ~ <<  >>
赋值运算符=         +=  -= *=  !=
条件运算符?:   (c语言唯一的三目运算符)
sizeof运算符用来计算变量或者类型占用内存空间的大小
逗号运算符

算数运算符

在终端获取用户输入的三位整数,输出这个数的百位、十位、个位之和

#include<stdio.h>

int main(int argc, const char *argv[])
{	
	int num = 0;
	int ge = 0;
	int shi = 0;
	int bai = 0;
	printf("请输入一个三位数:");
	scanf("%d",&num);
	bai  = num / 100;
	shi = (num % 100) / 10;
	ge = num % 10;

	printf("数字之和是:%d\n",ge+shi+bai);
	return 0;
}

自增自减运算符

以下方代码为例:不论是a++还是++a,a的值都会自增,但表达式结果不一样

b = ++a的值会增加1  

b = a++的值不变

#include<stdio.h>

int main(int argc, const char *argv[])
{
	int a = 0;
	int b = 0;
  
	a = 10;
	b = 0;
	b = ++a;
	printf("a = %d b = %d\n",a,b);   // a=11 b=11
	
	a = 10;
	b = 0;
	b = a++;
	printf("a = %d b = %d\n",a,b);   // a=11 b=10
	
	return 0;
}

关系运算符

== 关系运算符

=   赋值运算符

逻辑运算符

逻辑运算符的表达式结果是一个bool类型

逻辑运算符的短路原则:

逻辑与连接的多个表达式,有一个为假时,后面的表达式就不再执行

逻辑或连接的多个表达式,有一个为真时,后面的表达式就不再执行

&&逻辑与

逻辑与连接多个表达式都为真时,整个表达式的结果为真

有一个表达式都为假时,整个表达式的结果为假

||逻辑或

逻辑或连接多个表达式有一个为真时,整个表达式的结果为真

所有表达式都为假时,整个表达式的结果为假

!逻辑非表示逻辑取反,真变假 ,假变真(单目运算符)

位运算符

以二进制的形式参与位运算,一般都是使用无符号的类型(unsigned),一般用于对硬件设备的控制以及对标志位的控制等

&按位与按位运算,全1为1,有0为0
|按位或按位运算,有1为1,全0为0
^按位异或按位运算,不同为1,相同为0
~按位取反按位运算,0变1,1变0
<<按位左移整个数据向左移动,舍弃高位,低位补0
>>按位右移整个数据向右移动,舍弃低位,高位补0

小技巧:

0或任何数的结果都是任何数 ,1或任何数的结果都是1

1与任何数的结果都是任何数, 0与任何数的结果都是0

0异或任何数的结果都是任何数,1异或任何数的结果都是任何数取反

八个LED灯(编号:7 6 5 4 3 2 1),编写程序 操作LED灯:

1.将 1 4 5 7 号灯点亮

2.将 6 号灯点亮 

3.将4 号灯熄灭

4.让3号灯闪烁(亮1秒 灭1秒)

#include <stdio.h>
#include <unistd.h>

int main(int argc, const char *argv[])
{
	unsigned char led =0;

	//点亮1457灯 led=0xb2(10110010)
	//如果赋值的方式 点亮的同时 也会把其他灯熄灭
	led = led | 0xb2;
	printf("led = %#x\n",led); //x=0xb2 10110010

	//点亮6号灯 led=led|0x40  0100000
	led = led |(1 << 6); //和上面写法一样
	printf("led = %#x\n",led); //x=0xf2  11110010

	//熄灭4号灯 led=led & 0xef 11101111
	led = led & ~(1 << 4); //和上面写法一样
	printf("led = %#x\n",led); //x=0xe2  11100010

	//让3号灯闪烁  
	while(1){
		led = led ^ (1 << 3);
		printf("led = %#x\n",led); //Oxea 0xe2 
		sleep(1);
	}

	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值