C语言相关(二)

xiaoxiao2021-02-28  30

数据类型

数据以程序运行期间是否改变或被赋值分为 变量和 常量。                以计算机中的存储方式分为两大基本类型 整数类型和 浮点数类型,字符与 布尔类型也被包括于整数类型。 基本类型关键字:        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 shortlongcharfloatdouble32位42414864位428148    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》。

转载请注明原文地址: https://www.6miu.com/read-2620408.html

最新回复(0)