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(常量值)
- 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)
- float
12.3 == 1.23e1
- char
'\123' --- 表示该字符ASCII码是 八进制的“123”
'\xFF' --- 表示该字符ASCII码是 十六进制的“FF”
'\b' --- backspace
'\r' --- carriage return
'\?' --- question mark
- string
printf("hello,"
"world"); ---是可以的
printf("Hello, \
world"); ---也是可以的(world前面若有空格也会作为string的一部分)
- long int
123456789L
- unsigned long int
123456789ul,
- 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
下一篇: audio unit pcm 录制/混音