---取地址符:&
& 叫做取地址符;&+变量名:可以获取变量在内存中的地址(通过%p可以打印在内存中的地址)
示例:
输出结果:
(注:Linux 64位操作系统环境下,打印出来的地址会很大,因为在64位操作系统中,地址变量在内存中占有8个字节)
---C语言的输入函数scanf
格式:scanf(“格式控制串”,变量1的地址,变量2的地址,...);
功能:从键盘上输入数据存放到变量1,变量2.....,变量n所表示的内存单元;
示例代码:
运行结果:
---有符号和无符号数
在C语言中,基本数据类型都可以分为有符号(signed)和无符号数(unsigned);
signed | unsigned | |
含义 | 有符号数【正数、0、负数】 | 无符号数【正数,0】 |
写法 | (signed)int、(signed)char,其中signed可省略不写 | unsigned int,unsigned char |
---8bit数据的存储
char,有符号类型,在内存中占1个字节,可以表示负数,0,正数;表示的数据范围【-128~127】
unsigned char,无符号类型,在内存中占1个字节,可以表示0,正数;表示的范围【0~255】
--原码、反码、补码
无符号类型的数:原码,反码,补码都相同
例:
10:原码:00000000 00000000 00000000 00001010
反码:00000000 00000000 00000000 00001010
补码:00000000 00000000 00000000 00001010
有符号类型的负数的原码、反码和补码如下:
例:
-10:原码:10000000 00000000 00000000 00001010 (其中第一位表示符号,1表示负数;0表示负数)
反码:11111111 11111111 11111111 11110101 (符号位不变,其他位取反)
补码:11111111 11111111 11111111 11110110 (在反码的基础上+1)
--超出范围数据的计算方法
1. 先计算整数的补码(=右边的数)
2. 把补码赋值给变量,然后观察变量的数据类型,
3.若是为unsinged char类型,一定为正数或0,原,反,补一样.%d输出的原码就是补码,直接转换为元素输出即可。
4.若是为char类型,观察变量内存存储数据的最高位,1表示为负数,%d输出需要转换为原码输出.
示例代码:
输出结果:
---强制类型转换
含义:采取某种方式将某种数据类型强制转换为我们需要的数据类型(注:强制转换知识临时强转,本身数据类型没有改变)
--显式转换
格式:(数据类型)变量名(如 :int num = (int)pi;)
--隐式转换
若运算符俩边的类型不匹配,并且没有进行显示指定类型;系统会默认触发隐式的强转,强转规则如下:
---算数运算符
运算符 | 含义 |
+ | 俩数相加 |
- | 俩数相减 |
* | 俩数相乘 |
/ | 俩数相除(注:除数不能为零) |
% | 取模运算符(求余)要求俩边运算符必须为整数 |
tips:
/ 若俩边的操作数都为整数,默认为整除,小数舍去;
% 要求俩边的运算数必须为整数,否则,系统提示错误;
示例代码:
输出结果:
---自增(++),自减(--)运算符
规则:
前置++(--),先做加(减)法运算,再赋值
后置++(--),先进行赋值操作,再++(--)
(注:++,--运算符是单目运算符)
示例代码:
输出结果:
---关系运算符
--常见的关系运算符
运算符 | 含义 |
> | 大于 |
>= | 大于等于 |
< | 小于 |
<= | 小于等于 |
== | 等于 |
!= | 不等于 |
说明:
<1>条件成立的时候,运算结果为真(1),不成立时,运算结果为假(0);
<2>C语言规定,关系表达式的值只有两个 0 (假)和 1 (真);
<3>=和== 不同, =表示赋值操作,==表示判断是否相等;
示例代码:
输出结果:
---逻辑运算符
--逻辑与 &&
格式:表达式1 && 表达式2
规则:全真则真,有假则假
( 短路特性:表达式1为假,则不会执行表达式2)
--逻辑或 ||
格式:表达式1 || 表达式2
规则:全假则假,有真则真
( 短路特性:表达式1为真,则不会执行表达式2)
--逻辑非 !
规则:将假变成真,将真变成假
示例代码:
输出结果:
---位运算符
--按位与运算符 &
格式:表达式1 & 表达式2
结果:1按位与1的结果为1,1按位与0的结果为0,0按位与0的结果为0(速记:全1则1,有0则0)
--按位或运算符 |
格式:表达式1 | 表达式2
结果:1按位或0结果为1,1按位或1的结果为1,0按位或0的结果为0(速记:有1则1,全0则0)
--按位异或运算符 ^
格式:表达式1 ^ 表达式2
结果:相同为0,不同为1
--按位取反运算符 ~
格式:~表达式
结果:1变成0,0变成1
--左移运算符
格式:表达式 << 位数
结果:无论是正数还是负数,左移都是对应的二进制位向左移动高位丢弃,低位补0 左移的时候,等价于将这个数据乘以2的n(移动的位)次方
--右移运算符
格式:表达式 >> 位数
结果:逻辑右移(针对无符号数据) 对应的是正数和0,逻辑右移是对应的二进制位向右移动,低位丢弃,高位补0。算术右移(针对有符号数据):若是数据为正数,算术右移是对应的二进制位向右移动,低位丢弃,高位补0。若是数据为负数,算术右移是对应的二进制位向右移动,低位丢弃,高位补1。速记:向右移动,低位丢弃,高位正数补0,负数补1
示范代码:
输出结果: