C语言编程基础----常量&变量

常量: 

数字    十进制数(Dec)  20  

八进制(Oct 024  

十六进制(Hex)  0x14 

二进制数(Bin)  0b10100

字符‘ ‘    man ascii  

‘a’    字符aascii97

‘A’    字符Aascii65

‘0’    字符0ascii48 

 

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

    ‘\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

 

char   c = ‘a’;  ==等价于=> char   c = 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  对应的是0255

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

char  a= -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 <stdbool.h>

布尔变量,用来判断真假及条件是否成立,只能是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

 

doublea/2     其中是先对整型变量a做了强制类型转换

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

doublea/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 ;

 



猜你喜欢

转载自blog.csdn.net/SmallNewBirdBird/article/details/80625202