数据类型
数据以程序运行期间是否改变或被赋值分为
变量和
常量。
以计算机中的存储方式分为两大基本类型
整数类型和
浮点数类型,字符与
布尔类型也被包括于整数类型。
基本类型关键字:
C90之前:
int short long unsigned char float double
C90新增:
signed void(空类型)
C99新增:
_Bool(布尔类型)
_Complex(复数类型)
_Imaginary(虚数类型)
位、
字节、
字:
描述计算机存储单元的术语。
位 (bit):最小存储单元,存储0或1(用于设置开关),计算机内存基本构建块。
字节 (byte):1字节为8位(几乎所有机器),2^8种组合表示0~255间整数或一组字符。
字 (word):随计算机被设计时给定自然存储单位改变,从最初的1字长8位到目前的64位。
关键字所占内存(字节):
| int | short | long | char | float | double |
32位 | 4 | 2 | 4 | 1 | 4 | 8 |
64位 | 4 | 2 | 8 | 1 | 4 | 8 |
64位机下经代码测试.
除long之外,其它类型在32与64位机下所占字节数相同。
此外unsigned short、unsigned int、unsigned long与short、int、long相同,
32位下long double占12字节,64位下long double占16字节,有效位都为10字节。
运算符
基本运算符: = 、+ 、- 、* 、/ (c没有指数运算符但库中函数可用于指数运算)
逻辑运算符: && 、|| 、!
其它运算符: % 、++ 、-- 、sizeof
1.赋值运算符=: 赋值语句由右向左,右侧为常量(右值)或变量或表达式
左侧为可修改的左值(标识特定数据对象的名称或表达式);
C中也可以
多重赋值;(a=b=c=5;)
2.加减运算符
+、
-:运算对象可以是变量、常量、表达式(属于右值);二元运算符;
3.符号运算符
+、
-:改变值的代数符号;
4.乘除运算符
*、
/:整数除法结果(除不尽)中的小数部分被舍弃,称为截断,
两运算对象中任一元为浮点数(或强制类型转换)则不会出现截断;
除数为0时则程序会出现警告与异常;
整型接收int/int结果以整型输出为截断结果;以浮点型输出为0的浮点型格式;
浮点型接收int/int结果以整型输出为0;以浮点型输出为截断结果的浮点型格式;(根据结果找代码bug)
5.逻辑&&、||、!: 应注意使用方法
逻辑与&&两边各为能判断出真值的表达式,且判断后面的表达式的前提为前方表达式(或变量)真值为非0。
部分情况下也可用于化简循环语句中的判断条件。同理逻辑或 || 在前面条件为0的情况下编译器直接跳过后 面表达式判断。
逻辑非 !的使用则要根据对象的不同带上括号防止语法错误。
6.自增自减++、--:使用时根据是否在一条完整的语句中判断先后自增或自减,忌同一条语句中多次使用。
7.按位运算符: 按位与&、按位或 |、按位取反~、按位异或^:作用与逻辑运算符类似,对象为二进制。
8.左移右移运算符:左移<<、右移>>
应用:(函数体部分)
①判断奇偶: return (x&1); (奇数返回1,偶数返回0)
同理x%4:return (x&2);
②整数平均值:return (x&y)+((x^y)>>1);
③整数是否为2的幂:return ((x&(x-1))==0)&&(x!=0);
④不使用中间变量交换两数值: x ^= y; y ^= x; x ^= y;
也可以:x = x+y - x ; y = x+y - x;
⑤求绝对值: y = x >> 31 ; return (x^y)-y ;
⑥取模、乘除也可以转化为位运算。
ps:部分内容引自《C Primer Plus》。