![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C/C++
glose
这个作者很懒,什么都没留下…
展开
-
常见面试题一
<br />1.下列程序在32位linux或unix中的结果是什么? <br />func(char *str)<br />{<br />printf("%d",sizeof(str));<br />printf("%d",strlen(str));<br />} <br />main()<br />{<br />char a[]="123456789";<br />printf("%d",sizeof(a));<br />func(a);<br />}<br />答: 10 4 9<br />这个也就是说原创 2010-07-28 17:38:00 · 477 阅读 · 0 评论 -
C中一些小概念(摘抄自C陷阱与缺陷)
<br />C语言中只有一维数组;<br />对于一个数组,我们只能够做两件事:确定该数组的大小,以及获得指向该数组下标为0的元素的指针;<br />任何一个数组下标运算都等同于一个对应的指针运算;<br />如果我们使用数组名作为参数,那个数组名会立刻被转换为指向该数组第一个元素的指针(函数参数和情况);<br />而extern char *hello与extern char hello[]有着天渊之别;<br />复制指名并不同时复制指针所指向的数据;<br />当我们将0赋值给一个指针变量时,绝对不原创 2010-12-17 19:14:00 · 462 阅读 · 0 评论 -
有关int与unsigned的区别
以前在学习C语言时一直没有彻底的明白unsigned int 与int的区别,当时好像有一个概念就是负数用补码来表示,而相应的补码是通过把原码取反后加1得到补码,在其中符号位是不变的。今天到一本书上说,对于无符号数据来说,右移是逻辑的,也就是说在高位上是补0的,这个是肯定的,道理很明显;而对于有符号的数据,其右移为 算术的逻辑的都是可以的,不过基本上所有的编译器与机器组合对于有符号数据都使用算术右移,也就是说高位补符号位。验证如下:在这里取十进制数34来做为例子,在这里我才想起来从原码到补码的算法,一开始还原创 2010-12-20 17:48:00 · 2441 阅读 · 0 评论 -
大小端机器的判断-引发的思考
<br />深入理解计算机系统中第二章节有一习题:编写过程is_little_endian,当在小端机器上编译和运行时返回1,在大端法机器上编译运行时则返回0。这个程序应该可以运行在任何机器上,无论机器的字长是多少?<br />其参考答案如下:<br />There are many ways to solve this problem. The basic idea is to create some multibyte datum with different<br />values for the m原创 2010-12-28 16:01:00 · 2036 阅读 · 0 评论 -
十六进制转换成十进制的方法
看机器代码的时候,一般都是十六进制数,而我的心里还是觉得十进制比较爽,第一反应就是把他换成十进制的。对于正数而言比较好转换,一般就是按二进制转换成十进制的方法,就是乘16之类的;而对于有符号的数,就相对而言比较难点,特点是对于负数。总结方法如下:先根据最高位来判断正数OR负数,正数的话用无符号的方法解决;对于负数,一般而言就是前面大堆的FFFF之类的吧,如0XFFFFFEA0,我是这样解决的:取不是F的位,EA0,把其转化成FFF得加多少?15F,然后把其转化成十进制,1*16*16+5*16+15=251原创 2010-12-29 15:10:00 · 5988 阅读 · 1 评论 -
swap(a,b)引出的问题
void inplace_swap(int *x,int *y){ *x = *x ^ *y; *y = *x ^ *y; *x = *x ^ *y;}在深入理解计算机系统中有这样的一道习题,也是常见的面试题目,即不用第三个变量,实时交换二个数的值。上面代码是其实现其方法,但接下来提出了如下一个问题,如这个函数的基础上,实现将一个数组中元素头尾两端依次对调。这个函数实现起来比较简单,通过inplace_swap()这个函数把第1元素与最后一个原创 2011-04-14 18:26:00 · 1265 阅读 · 0 评论 -
C:位运算
<br />本文转自:http://zhangjunhd.blog.51cto.com/113473/52734<br />1.负数表示-二类补数(twos complement)<br />一般使用二类补数表示负数,最左边一位为符号位.<br />将一个十进制负数转化为二进制符号数时,首先给这个数加1,然后取绝对值,再将其转换为二进制,最后对这个二进制求补.<br />[1]-5<br />[2]-4<br />[3]4<br />[4]0000 0100<br />[5]1111 1011<br />将转载 2011-04-29 16:46:00 · 465 阅读 · 0 评论