c语言学习day05

有符号数和无符号数

 在C语言中, 整数是可以带符号的(有符号,signed)或不带符号的(无符号,unsigned)。这两种类 型的整数在内存中以二进制形式表示。并使用不同的模式。 有符号数(Signed Numbers) 有符号数是来表示正数、负数、0的整数类型。

 在内存中,有符号数使用最高位(通常是符号位) 来表示正负。如果最高位为0,表示这个数是正数或0,如果最高位为1,表示这个数是负数。其余 位用于表示数值本身。

举例:例如一个8位有符号整数可以表示的范围是-128 ~ 127 。这是因为1位用于表示符号(正或 负),剩下的7位用来存放数据

注意:有符号位是默认的。

在C语言中,基本整数类型如int,short,long默认为有符号数,除非明确 指定为无符号。

在创建有符号数时默认省略signed关键字

无符号数(Unsigned Numbers) 无符号数是只能表示非负整数的数据类型。

在内存中,无符号数不使用符号位,所有位都用于表示 数值。因为,无符号数的范围比有符号数的范围更大。

注意:在C语言中,通过关键字后添加 unsigned 。来指定无符号类型,如 short.. 举例:例如一个8位无符号整数可以表示的范围是 0 ~ 255 。这是因为所有8位都用来表示数值, 没有符号位。

运算符补充

位运算符

说明:按位(bit) 来进行运算操作的运算符。

语法:~ & | ^ >

~: 按位取反

说明:单目运算符,数据的每一个bit位取反,也就是二进制数位上的1变0,0变1。

举例: &: 按位与 语法:a & b 说明:首先将参与计算的操作数转换为二级制,然后按照每一位进行对齐  

如果我们前后两个操作数对齐位置上的二进制数字都是1,其结果是1,否则结果都是0

|: 按位或

语法:a | b

说明:首先将参与计算的操作数转换为二级制,然后按照每一位进行对齐,处理结果如下:

如果我们前后两个操作数对齐位置上的二进制数字只要有1,其结果是1,否则结果都是0

 ^: 按位异或

语法: a ^ b

说明:首先将参与计算的操作数转换为二级制,然后按照每一位进行对齐

总结:不同为1,相同为0

<<: 左移,按 bit 位往左偏移

无符号左移

语法: 操作数 << 移动位数(bit位) 

unsigned int a = 1 << 1;
//定义一个无符号整数a,将a左移1位(此时是将1转换为二进制再移位)

有符号左移

语法: 操作数 << 移动位数(bit位)
 

int a2 = -1 << 1;
/*定义一个有符号整数(系统默认定义的整数为无符号数,可以省略signed关键字)
将-1转换为二进制左移一位*/

>>: 右移,按 bit 位往右偏移 

无符号右移

语法:  操作数 >> 移动位数(bit位)

unsigned int a = 1 >> 1;
//定义一个无符号整数a,将a右移1位(此时是将1转换为二进制再移位)

 有符号右移

语法: 操作数 >> 移动位数(bit位)

int a2 = -1 >> 1;
//定义一个有符号整数将-1转换为二进制右移一位

注意

在进行移位运算的时候,凡是被移出去的位统统丢弃,凡是空出来的位统统补0。移位运算针对的 是无符号整数.

如果非要进行有符号的移位运算,那么左移的时候,空出来的补0,右移的时候,空出来的补符号 位(原码阶段)

其他运算符

赋值运算符

包含:

= :由右向左赋值。

注意:赋值运算符的左边(左操作数)必须是可写的地址。

复合赋值运算符

包含: += -= *= /= %= ,由右向左。

int i = 1;
i+=1; 
// 等价于 i = i+1
i -=1;
// 等价于 i = i-1
i*=1; 
// 等价于 i = i * 1

三目运算符

语法: 表达式1?表达式2:表达式3 

其实就是if.else.简化版。

求值顺序: 如果表达式1的值为1,则整个条件运算表达式的值为表达式2的值; 如果表达式1的值为0,则整个条件运算表达式的值为表达式3的值。

C 语言程序设计结构

C 语言设计的核心(灵魂)

         程序 = 数据结构 + 算法

算法:对于问题解决的方法思路或者步骤

算法的特征

有穷性:问题需要在有限的步骤内完成

可行性:解决步骤和方法思路必须要切实可行

确定性:每一个代码指令要有明确的功能含义

算法的描述:流程图 

C 语言程序设计的设计结构

三大结构:顺序结构、分支(选择)结构、循环结构

顺序结构

说明:各操作是按先后顺序执行的。是最简单的一种基本结构。这个也是默认的结构。

选择结构

说明:又被称之为分支结构,根据条件是否成立,选择对应的操作。

循环结构

说明:又被称之为重复结构

当型循环

特点:先判断条件,后执行语句,语句可能一次也得不到执行

直到型循环

特点:先执行语句,后判断条件,语句至少执行一次

C 语言的语句分类

控制语句:while. for. if.else . .

函数调用语句:scanf( .);

表达式语句:b=3;

空语句:;

复合语句:{ .} 

输入输出语句(printf()/scanf());

输入输出缓冲机制

概述

  缓冲区又称为缓存,它是内存空间的一部分。也就是说,在内存空间中预留了一定的存储空间, 这些存储空间用来缓冲输入 或者输出的数据,这部分预留的空间叫做缓冲区。缓冲区根据其对应的是 输入设备还是输出设备,分为 输入缓冲区和输出缓冲区

缓冲区的优点

1.减少IO设备的操作

2.提高计算机的运行速度。

缓冲区的类型

全缓冲:当填满缓冲区之后,才会进行实际IO操作。 

行缓冲:当在输入和输出中遇到换行符时,执行真正的IO操作,也就是冲刷缓冲区的数据。比如键盘 输入数据

不带缓冲:也就是不进行缓冲,标准出错情况stderr是典型代表,这使得出错信息可以直接尽快地显示 出来。

引发缓冲区的刷新

1、遇到换行符\n 

2、缓冲区满(溢出)

3、执行fflush(stdout),手动刷新缓冲区

  • 9
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值