manipulated 操纵  notations符号 hexadecimal十六进制 precision精度 be concatenated at 把····联系起来 enumerations枚举 long standing存在很久的 formalizing形式化 coercions强制 underscore下划线.assemblers汇编 typographically印刷 suffixed 添加后缀 truction建设binary 二元的 unary一元 negation operator 求反   considerable该注意的 flexible灵活的 implementation 实施 contiguous接触的 邻接的  inadvertently疏忽的漫不经心的  coercion强迫 conciseness 简明 succinct简洁的 nested嵌套

oprand操作数,运算数,the number on which an operation is to be done。

1这本书还是有点难度的,本来以为只是一本入门教程。首先这天杀的英语。单词能看懂七成,组合在一起只能看得懂三成了。还有这练习题,哪有第一章就这么可怕的.....还贴心的注明了 this program is hard if you do it 。看得懂看不懂 先过一遍再说

2ANSI改了不少东西 比如unsigned 浮点精度 long double 字符串在编译的时候可以背联系起来 枚举类型(只记得是干嘛的了) const锁定变量以及 变量计算直接的转换有了更丰富的类型集(?)

3使用字母和数字来做变量名 _也可以但一般不用在首位 _可以很好的提高长变量名的可读性 大小写是不同的变量 如 x和X 一般用小写作变量 大写做常量

4如果 c h a r对象占用8位,那么unsigned char变量的取值范围为0 ~ 2 5 5,而signed char变量的取值范围则为- 1 2 8 ~ 1 2 7普通c h a r对象是有符号的还是无符号的则取决于具体机器,但可打印字符总是正的。

5 如果数字太大超过int范围 也会被当做long 处理.0(zero)在前是八位数 0x或者0X是是六位数   31 =037或者0x1F或者0x1f. 0XFUL 就是一个unsigned constant的15.

6字符常量是一个整数 如‘0’的ASCII码是48,字符常量也可以参与数值运算.

7

#define VTAB '\013' /* ASCII纵向制表符 */
#define BELL '\007' /* ASCII响铃符 */
也可以用十六进制写
#define VTAB '\xb' /* ASCII纵向制表符 */
#define BELL '\x7' /* ASCII响铃符 */

8

\a 响铃符 \ \ 反斜杠
\b 回退符 \? 问号
\f 换页符 \' 单引号
\n 换行符 \" 双引号
\r 回车符 \ooo 八进制数
\t 横向制表符 \xhh 十六进制数
\v 纵向制表符

9常量表达式是含有常量的表达式 在编译时就已经计算

10"hello, " " world”  等价于 “hello, world”  这种方法可以将较长的字符串分成多个文件行

11字符串存储来看就是字符数组 最后要加 '\0‘所以字符串存储物理长度比字符数多一位  strlen就是返回字符串长度 不包括‘\0’  要区分'x'和“x” 前者是个数字 后者是字符串 里面有x和\0

12枚举常量

enum boolean { NO, YES };  NO是0 YES是1 如果还有就2 3 类推

还有一种是显示表达式 类似这样

enum escapes { BELL = '\a', BACKSPACE = '\b', TAB = '\t',
NEWLINE = '\n', VTAB = '\v', RETURN = '\r' };

enum months { JAN = 1, FEB, MAR, APR, MAY, JUN,
JUL, AUG, SEP, OCT, NOV, DEC };
/* FEB的值为2, MAR的值为3,等等。 */

不同枚举名字必须要不同,值则可以相同

13变量首要要声明 自动变量在使用前必须初始化 而且从概念上讲应该在程序开始执行之前进行 ,外部变量和静态变量缺省值为0 自动变量如果没初始化则为垃圾(未定义值)

14 const可以限定一个值不被改变 数组也可以限定 如 int strlen(const char[]);

15 %不能用于float和double 在负数计算除数和余数时候 整数截取上溢还是下溢取决于具体机器

16 + - 优先级相同 低于 * / % 低于一元的+和- 结合从左到右  关系运算> >= < <= 优先级相同 == 和!=优先级比前者低 关系运算符 优先级都低于计算优先级

如x<lim-1 等价于x<(lim-1)

17&&比||优先级高 但是都低于关系和计算运算符 当表达式从左到右测试出真假值就停止计算 比如     if( (a = 1) || (b = 2) )    最后a=1  b并没有赋值

18  ,运算符从右到左

  1. a = 1;
  2. b = 2;
  3. c = 3;
  4. printf("a = %d, b = %d, c = %d\n", a = c + b, b = a + c, c = a + b);   得出a=7;b=4;c=3

19类型转换是从窄的转成宽的 如 int 转为float才不会丢失数据 值得注意 不允许使用无用表达式 如float不能用于数组下标 long改成short float 改为int 会导致警告 但是不是非法表达式

20lower(c)将大写转成小写 非大写不变(ASCII字符集适用,EEBCDIC不适用) <ctype.h>使用了tolower作为代替 isdigit()测试是否为数字; atoi 将数字串转换成数字“123456789” 123456789

21 C语言没有指定 c h a r类型变量是无符号量还是有符号量。所以在某些机器上最左边一位是1的 机器会转换为负数 某些机器会在最左边添零保证全体是正数 为了可移植性如果要存储非字符数据则在char 前加unsigned signed

22在 if while for等等测试条件下 0为flase 非0为true

23如 + 或 * 等二元运算符的两个运算分量具有不同的类型,那么在进行运算之前先要把“低”的类型提升为“高”的类型。long double >double >float>int>long  此外 float不会自动转换成double

24赋值= 右边转换成左边类型 float转换成int 要截取小数 是用四舍五入还是截取要看具体实现

25在调用函数时如果没有函数原型则将float变为double char 和short 改为int  (类型名)变量名 可以强制转换 如(int)names;  sqrt ( (double) n) ;在传递前就转换为double了 产生一个n的新类型的值 n本身不改变7

26i++ 和 ++i 一个先用后加 一个先加后用 (u+j)++不合法  单独的nl++;和++nl;等价

27 &按位与  比如 n = n & 0177    0177二进制是1111111 就是把n最低七位以外 其他为0    0&1=0 1&1=1 0&0=0  或同理 0&1=1   按位^则 如果两个数字不同则1 否则则0  。要区分&和&& ||和| x是1 y是2 x&y 为0  x&&y 为1

28<<左移是把数字左移一定位数 x<<2 就是左移两位 即是4倍  >>unsigned则右移两位 左边空白用0填充  有符号的则用算数符号填充   ~则为求反码 0改1 1改0: 比如x= x &~077则为把最后六位改为0。

getbits(x, 4, 3)
unsigned getbits(unsigned x, int p, int n)
{
return (x >> (p+1-n) ) & ~(~ 0 << n);
}

比如111111   x >> (p+1-n)  则为001111;~0为1111111<<3  为11111000  取异00000111  然后& 则取 原来的右对齐的2 3 4位1 (从0开始计数)

29 大多数 二元运算符都有 一个 op=的形式 op可以是 + - * / % << >> & ^ |   expr1 op= expr2  等价于 expr1=( expr1) op (expr2)x*=y+1 等价于 x=x*(y+1) 不是 x=x*y+1

30if (a > b)
z = a;
else
z = b;

可以改写为

1    2   3

z= (a>b)?a:b;  如果条件非0则计算表达式2并作为条件的值 否则计算表达式3  ?优先级很低 条件可以不加括号  不过在不确定的情况下还是加一下比较好 如果表达式2 和3有不同的类型 则用之前的转换规则来办

31 C没有指定同意运算符的顺序  如x = f( ) + g( )   不同机器可能先运算f 也可能先算g  如果f改变了g中的变量(反之亦然) 则推荐先用临时变量来存储其中的一个结果来确定顺序

同样 参数的顺序也没有特别规定 比如 printf("%d %d\n", ++n, power(2,n) );  n先加还是先算power 要看具体实现而定

所以可以改成

++n;
printf("%d %d\n", n, power(2,n) );

32 关于副作用 a[i] = i++;  这个i是新值还是旧值 要看具体的编译器实现,C标准没有对此规定 因为最好的求值顺序取决于机器结构。所以我们要尽量避免着这种情况。

the c programing language 学习过程2的更多相关文章

  1. the c programing language 学习过程8

    glean 捡拾落穗; glean insight 深入了解 modeled模型化 peripheral外围的 himogeneous匀称的 intents 意图  excerpt摘录 intende ...

  2. the c programing language 学习过程7

    interact 互动 carriage运费运输 linefeed 换行 redirection改方向 interleaved交叉存取 adequate足够的 untouched原样的  specif ...

  3. the c programing language 学习过程6

    payroll工资名单 hierarchy分层层次 vexing 使人烦恼的 alignment结盟 semantics 语义 aethetic审美 parameterize 参数化 1结构标记 成员 ...

  4. the c programing language 学习过程5

    lumped 集成总结 mandating托管 consecutively连续地 contiguous临近的 mnemonic记忆力的 mimics 酷似 魔方 bind捆绑 synonym同义词 s ...

  5. the c programing language 学习过程4

    4Functions and Program Structure scratch 刮擦 starting over from scratch从头开始 reside驻留 separately 分别的 f ...

  6. the c programing language 学习过程3

    ControlFlow  控制流 specify 指定 compound statement 复合语句 cryptic有隐含意义的 ambiguity歧义 robust稳健 disintegratio ...

  7. 使用一个数组存储一个英文句子"java is an object oriented programing language"

    class fun { public static void main(String[] args) { String str="java is an object oriented pro ...

  8. The python programing language

    Python is an example of high-level language. As you might infer from the name “high-level language”, ...

  9. Linux下C高手成长过程

    建议学习路径:  首先先学学编辑器,vim, emacs什么的都行. 然后学make file文件,只要知道一点就行,这样就可以准备编程序了.  然后看看<C程序设计语言>K&R, ...

随机推荐

  1. Go_Hello word

    与Go相关直接命令有哪些? go get    获取远程包 go run    直接运行程序 go bulid  测试编译 go fmt    格式化代码 go install       编译包文件 ...

  2. maven系列--maven目录

    我们在玩maven,首先就是利用maven来管理我们的项目.其实maven并不难,它无非是一种目录结构.所以在本系列开始之前,我们要细致的了解下maven的目录,其实也就是maven的约定. 约定优于 ...

  3. Log4net使用详细说明

    1.概述 log4net是.Net下一个非常优秀的开源日志记录组件.log4net记录日志的功能非常强大.它可以将日志分不同的等级,以不同的格式,输出到不同的媒介.本文主要是介绍如何在Visual S ...

  4. grep的小技巧

    grep '^[^#]' /etc/openvpn/server.conf 中括号必须匹配一个字符^$属于标志位,不属于字符 grep没把\n看成字符 grep把空行看成^$ 还是perl的标准,空行 ...

  5. Activity组件安全(下)

    什么是Activity劫持 简单的说就是APP正常的Activity界面被恶意攻击者替换上仿冒的恶意Activity界面进行攻击和非法用途.界面劫持攻击通常难被识别出来,其造成的后果不仅会给用户带来严 ...

  6. MonogoDB 查询小结

    MonogoDB是一种NoSQL数据库 优点: 1.数据的存储以json的文档进行存储(面向文档存储) 2.聚合框架查询速度快 3.高效存储二进制大对象 缺点: 1.不支持事务 2.文件存储空间占用过 ...

  7. 面向切面编程之手动JDK代理方式

    需求描述: 抽取dao层开启和提交事物交由代理类一并执行 分析: 假如UserDao接口中有很多方法,例如addUser().deleteUser().updateUser()等等,需要频繁的和数据库 ...

  8. Trusted Execution Technology (TXT) --- 启动控制策略(LCP)篇

    版权声明:本文为博主原创文章,未经博主允许不得转载.http://www.cnblogs.com/tsec/p/8428631.html 在TXT平台中,启动控制策略(Launch Control P ...

  9. 51NOD 1821 最优集合 [并查集]

    传送门 题意: 一个集合S的优美值定义为:最大的x,满足对于任意i∈[1,x],都存在一个S的子集S',使得S'中元素之和为i. 给定n个集合,对于每一次询问,指定一个集合S1和一个集合S2,以及一个 ...

  10. BZOJ 2809: [Apio2012]dispatching [斜堆]

    题意:主席树做法见上一题 我曾发过誓再也不写左偏树(期末考试前一天下午5个小时没写出棘手的操作) 于是我来写斜堆啦 从叶子往根合并,维护斜堆就行了 题目连拓扑序都给你了... 说一下斜堆的操作: 合并 ...