欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

c

程序员文章站 2022-07-14 08:00:24
...

C programming

Output

单字符:

putchar('char')

cout << 'char';
cout << '\'';

多字符:

printf("str");

cout << "str";

格式化输出:

"%d", int
"1.6f%", float   ---'1'表示至少1 Byte

cout << "str" << int << endl

Comments:

//  行
/**/ 块

变量(variable type):

· int        --4 Bytes(常量同)
· float      --8 Bytes
· bool       --1 Bit
· double     --   
· char       --1 Byte
· 

evaluation:

var = var2;  
var = value; //此表达式返回变量值
var = ++ var3;

initialization

int b = 0;

type conversion

int --> char  ----丢掉高位字节
char --> int  ----先赋低位字节,如果低位字节的最高位是0,前面都补0;是1,则补1
10000000 --> -128
01111111 --> 127
-n == ~n+1 --->'~'取反符号,即每个bit 0 -> 1, 1 -> 0.




bool isMale = 100;     ---- isMale == 1
hexadecimal  --
octonary
binary

input

cin >> var >> var2 >> var3;  ---非链式赋值而是多个赋值

保留字

identifier

命名规范,可读性好,不能用保留字

variable

变量都有标识符和类型
匿名变量不能作左值

const

通常大写,常量更好辨识

literal(常量值)

  1. int
十进制 123
八进制 0173 --零开头则是八进制
十六进制 0x7B == 0X7B --0x(X)开头是十六进制
·representing negative values
    1. 思路: 用高位整数映射负数(补码)   ---待证明
    2. 对称性,正数的补码还是它本身
    3. 例子(ten's complement):Negative(i) = 10^k - i,where k is the number of digits.  ---binary negative(i) = 2^k - i
    4. binary 最高位为1的为负数
    5. 反码(取反后的bits序列)+1即为补码
    6. 计算机算数时要么得到结果,要么溢出(Overflow)
        ·Overflow is ...
        .正正得负,负负得正(相加运算),则溢出
        .永远别太相信计算机计算的结果(怕溢出)
.bit(位)  1 or 0
.byte(字节)    8bits
    .c types maybe int8_t, uint8_t, char
.representing fraction part
    1. 移位操作 << >>  等价于乘(除)base
    2. 少判断两个表面看起来相等的数是否相等
        ·(float)0.15 != (float)0.45 / 3    
    3. 小数点
        ·定点表示法  --用固定的byte表示小数部分,别的byte表示整数,泾渭分明
        ·浮点表示法  --科学计数法 sign * mantissa * 2^exp用exp来决定小数点要移动的位(单独拿出一位来作为sign)        
  1. float
    12.3 == 1.23e1
  2. char
'\123'  --- 表示该字符ASCII码是 八进制的“123”
'\xFF'  --- 表示该字符ASCII码是 十六进制的“FF”
'\b'    --- backspace
'\r'    --- carriage return 
'\?'    --- question mark

  1. string
printf("hello,"
"world");   ---是可以的

printf("Hello, \
world");  ---也是可以的(world前面若有空格也会作为string的一部分)


  1. long int
    123456789L
  2. unsigned long int
    123456789ul,
  3. enum
enum bool { false, true };
    enum bool m = false;   ----m == 0
定义一个类型bool,花括号里的名字若不初始化的话默认从0开始,不赋值的话后面的值总为前面值+1
使用时声明如上;
枚举的值只能是整数。

Data Types and Sizes

short int -- 16 bits
long int -- 8 bytes
long double --- 16 bytes
unsigned numbers --无符号数
sizeof() --返回字节数

Arithmetic Operators

+-*/ ---不同输出类型运算方法不同(典型的例子:整除)
%    ---整数求模
优先级:左结合(+-*/%)
(unary)+ == (unary)- > (binary)* == / == % > (binary)+ > (binary)-
(unary)! > && > ||    ----非 > 与 > 或
赋值操作符:返回左操作数,遵循右结合
(x = 1) = 2   ---- 等价于x = 2
x = y = z = 100;   ----x, y, z都是100 

优先级见C programming language P42

Type Conversions

操作符两旁数据类型不同时会触发类型转换

赋值时会类型转换 ---   int d = 1.1;     ----d == 1
运算符遵循由“窄”到“宽”原则 使用更“宽”的运算符,并转换数据类型
warning:规则上的错误不会触发类型转换(例如: 3.5%2  a[1.5])
char -> int 时,值不变
作为参数传递时也会触发类型转换
显式转换:(double)n ----n的值不受影响(中间过程存在匿名变量)

Increment and decrement


++ i ------令i = i + 1,并返回i + 1, 可作左值相当于i
i ++ ------令i = i + 1,并返回i的值(中间过程存在匿名变量),不可作左值
arr[i++]
*p++

Bitwise operator

据说比四则运算快

& | ^ << >> ~

把整数看成bit组成的序列

按位与:& 每一位进行与运算(1与1等于1,其他都为0), (按位与1可以消除前面的所有位)

按位或:

按位异或:0^0 and 1^1 == 0, 否则 == 1

按位取反:’~’ 0->1 1->0 -x = ~(x - 1)

左移右移: 1. << 整个序列往左移动,多的位补0
2. >> ·有符号补符号位
·没符号补0
3. 等价于乘除2

Assignment Operators

= - * / % << >> & ^ |     ----都有增强运算符
x &= x - 1                ----去掉x最后一位1 

Conditional Expression

condition ? exp1 : exp2
若condition为真执行exp1并将结果作为返回值,为假执行exp2并将结果作为返回值

Boolean expression

Morgan’s Law

Short-circuit operation

相关标签: c