c语言字符型变量编程,C语言编程基础----常量&变量

常量:

数字十进制数(Dec)  20

八进制(Oct)024

十六进制(Hex)  0x14

二进制数(Bin)  0b10100

字符‘ ‘man ascii

‘a’字符a的ascii码是97

‘A’字符A的ascii码是65

‘0’字符0的ascii码是48

转义字符在字符中用\表示

‘\n’换行符Linux中一次enter键会识别为‘\n’

还有‘\t’制表符[tab]

‘\r’回车符,window中一[enter]键会识别为’\r’’\n’

‘\b’退格符[backspace]

'\0' 空字符(nullcharacter)就是0

‘\\’因为\已经表示转义字符,所以要表示一个\必须写成’\\’

还有和八进制或者十六进制数字联合一起的转义字符,表示取对应的ASCII码值

Oct   Dec  Hex   Char

141   97   61      a

‘a’ ===  97 ===0141 ===0x61===’\x61’===’\141’

练习:

定义一个char类型变量,尝试用不同的方式给该变量赋值,并打印结果;

char   x = ‘a’;

char   y = 97;

printf(“x = %c ,   x=0x%x \n”,x, x );

printf(“y = %c ,   y=0x%x \n”,y, y );

字符串“ ”

“hello”只要有双引号,在字符串的最后就会有一个空字符’\0’

‘h’  ‘e’  ‘l’   ‘l’   ‘o’   ‘\0’

变量:

在运行过程中数值会发生变化的

变量名是由字母和下划线开头,由数字、字母、下划线组成的

定义一个字符型变量

char   c = ‘a’ ; //用常量‘a’给变量c赋初值

char   _3c = ‘a’ ;

char   val = ‘a’ ;

以上,实际写入到内存的是字符‘a’所对应的ASCII码值

Oct   Dec  Hex   Char

141   97   61      a

charc = ‘a’; ==等价于=>charc = 97 ;

变量的定义:

按数据类型在内存中申请指定大小的字节空间

1)【数据的作用域】数据类型变量名;

2)【数据的作用域】数据类型变量名=初值;

作用域:static静态变量,按需求设置

数据类型:是必须的

基本数据类型有:

char占用1个字节(1Byte ,1B)

char带符号数,最高位是符号位(为1是负数,0表示正数)

0000 0000                          0

0000 0001 ~ 0111 1111表示正数(1 ~~ 127)

1000 0000 ~ 1111 1111表示负数(-128 ~-1)

负0就是-128

取值范围是-128 ~ 127(-27 ~~27-1)

unsigned char无符号数

0000 0000 ~ 1111 1111对应的是0到255

(0 ~~ 28-1)

char z = 129;// 1000 0001

printf("z=0x%hhx, z=%hhd , z=%hhu\n", z, z , z);

%x是把内存中的数据直接输出(4B)

%d是把数据输出成带符号的十进制数(4B)

%u是把数据输出成无符号的十进制数(4B)

如果只需要打印1B的数据用hh表示4的一半再一半

如果只需要打印2B的数据用h表示4的一半

z=0x81 , z=-127 , z=129

证明已经把10000001写入到内存

%d需要把这个数据当成是带符号的补码,需要显示出其原码

1000 0001 -1 ==》反码1000 0000

==》原码1 111 1111 ==》-127

在计算机中,默认是以补码的方式存放数据

正数的补码值等于它本身的值(原码)0000 1000

负数的补码值为其原码取反后+1

chara= -1; //  1000 0001   原码

其反码是除了符号位全部取反为1111 1110

实际写到内存的补码,为反码+1,也就是1111 1111

用正数给变量赋值,编译器直接就把它的原码(补码)写入到内存;

用负数给变量赋值,编译器会找到它的补码再写入到内存;

思考:char  a = 135;

和unsignedchar  b = 135 ;

实际写入内存的有没有区别?(没有)

在使用的时候有没有区别?

(自动类型转换带符号转成无符号~)

a+5和b+5的结果是否一致

结果用打印没有区别

short短整型

占用2个字节(2Byte ,2B)

(-215~~ 215-1)

unsigned short(0~~ 216-1)

int     32位占用4个字节(4Byte ,4B)

64位占用4个字节(4Byte ,4B)

unsigned int

float单精度浮点型带有小数点%f

32位占用4个字节(4Byte , 4B)

64位占用4个字节(4Byte ,4B)

unsigned float

float   x = 0.01;

float  x = 1e-2 ;

float   y = 10000.0;

float  y = 1e4 ;

long长整型%ld  %lu   %lx

32位占用4个字节(4Byte , 4B)

64位占用8个字节(4Byte ,4B)

unsigned long

double双精度浮点型带有小数点的%lf

32位占用8个字节(4Byte , 4B)

64位占用8个字节(4Byte ,4B)

unsigned double

long double类型用%llf打印

bool / _Bool

需要加头文件

#include

布尔变量,用来判断真假及条件是否成立,只能是0或者1

true为1     false为0

类型转换

int a = 5;

double  b = a / 2 ;

请问b为多少2.000000在除的时候,a依旧是int整型,

a/2得到的是整数部分,所以就是整数2

赋值的时候double就会把2变成是带小数点的浮点数,赋值给b(自动类型转换)

a / 2为多少a/2得到的是整数部分,所以就是整数2

(double)a/2其中是先对整型变量a做了强制类型转换,

在这条语句中暂时作为浮点数进行运算,

(double)a/2得到的就是2.500000

(double) (a/2)是把a/2的结果强制类型转换,

a/2得到的是整数部分,所以就是整数2

(double)(a/2) = 2.000000

自动类型转换在运算过程中自己转换的

强制类型是针对变量或者表达式或者函数的返回值,用(新类型)来实现强制类型转换

表达式和语句

表达式由变量、运算符等组成

a=1   a +1  a+b a++   a > b

语句才可以代码中独立存在,必须有分号

a +=1;   a+1 ;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值