编程基础
明月镇魂
还要神马简述。
展开
-
C语言中char变量详解
char是C/C++整型数据中比较古怪的一个,其它的如int/long/short等不指定signed/unsigned时都默认是signed。虽然char在标准中是unsigned(因为char类型提出的初衷是用来表示ascii码,ascii码的范围是0~127),但实际情况中究竟是signed还是unsigned取决于编译器。可通过下面程序判断编译器的默认char类型: void转载 2015-03-10 21:32:11 · 3183 阅读 · 0 评论 -
关于素数的一些知识以及算法
原文地址:董的博客,但是这篇文章的算法有点小问题,请注意看下面的评论。1. 素数判定问题素数判定问题是一个非常常见的问题,本文介绍了常用的几种判定方法。2. 原始算法素数的定义是,除了能被1和它本身整除而不能被其他任何数整除的数。根据素数定义 只需要用2到n-1去除n,如果都除不尽,则n是素数,否则,只要其中有一个数能整除则n不是素数。bool is_primer1(int转载 2015-05-31 01:04:16 · 668 阅读 · 0 评论 -
魔方阵
自己写的魔方阵算法(只能输出奇数阶)#include int main(int argc, char *argv[]){ int line,col,n,p,i,j; int a[508][508]={0}; p=1; while(p==1) { scanf("%d",&n); if(n%2!=0&&n<=507) p=0;原创 2015-06-24 00:01:18 · 577 阅读 · 0 评论 -
关于unsigned char、unsigned short使用printf(“%d”)进行输出的结果
参考博客:C语言 unsigned 和 signed 类型相互转换深入理解参考博客:unsigned和signed对于unsigned 无符号数据类型是不应该向其赋值负数的,但是如果赋值了那会怎么样呢?#include #include int main(){ unsigned char uc= -1; unsigned short us=-1; unsigned in转载 2015-07-16 00:11:58 · 66758 阅读 · 1 评论 -
C语言函数参数传递之痛
文章原地址:点击打开链接首先先讲一下表达式中“类型提升”,来自《C专家编程》 整型提升就是char,short(无论unsigned,signed),位段类型,枚举类型都将提升为int类型。前提是int类型能完整容纳原先的数据,否则提升为unsigned int类型。 char c1,c2; c1=c1+c2;转载 2015-08-02 03:09:12 · 713 阅读 · 0 评论 -
printf中用%d输出float或者double
首先说一个“默认参数提升”的概念:If the expression that denotes the called function has a type that does include a prototype, the arguments are implicitly converted, as if by assignment, to the types of the corresp转载 2015-08-02 03:12:21 · 16953 阅读 · 0 评论 -
关于对char类型数据赋予负值的汇编表现
今天在看谭4,看到char的时候,上面有一句话说:可以把0-127之间的整数赋予一个字符变量,那把一个负数赋值给一个字符变量会怎么样呢?#include#include #include #include #include void main(){ char c; c=-200; printf("c1=%c,c2=%d,c3=%x\n",c,c,c);}原创 2015-07-19 13:23:11 · 3990 阅读 · 0 评论 -
深入理解按位异或运算符
参与运算的两个值,如果两个相应bit位相同,则结果为0,否则为1。即: 0^0 = 0, 1^0 = 1, 0^1 = 1, 1^1 = 0按位异或的3个特点:(1) 0^0=0,0^1=1 0异或任何数=任何数(2) 1^0=1,1^1=0 1异或任何数-任何数取反(3) 任何数异或自己=把自己置0按位异或的几个转载 2015-09-14 01:17:50 · 671 阅读 · 0 评论 -
一个费力不讨好的选择排序
void choosefun(float array[],int m){ int i,j; float n; for(i=0;i { for(j=i+1;j { if(array[i]>array[j]) { n=array[i];原创 2015-09-14 01:22:05 · 350 阅读 · 0 评论 -
关于异或的一些东西和应用
异或是一种基于二进制的位运算,用符号XOR或者 ^ 表示,其运算法则是对运算符两侧数的每一个二进制位,同值取0,异值取1。它与布尔运算的区别在于,当运算符两侧均为1时,布尔运算的结果为1,异或运算的结果为0。简单理解就是不进位加法,如1+1=0,,0+0=0,1+0=1。性质1、交换律2、结合律(即(a^b)^c == a^(b^c))3、对于任何数x,都有x^x=0,x^转载 2015-11-22 23:22:12 · 1630 阅读 · 0 评论 -
原码和补码
我不想介绍什么原码和补码的概念,只是为了自己重拾原创 2014-08-17 21:40:32 · 558 阅读 · 0 评论 -
为什么C语言中int的表示范围是-32768~32767
本文谈论的都为有符号数。这得从二进制的原码说起:二进制原码最大为0111111111111111=215-1=32767二进制原码最小为1111111111111111=-(215-1)=-32767正0和负0:0000000000000000=1000000000000000=0所以,二进制原码表示时,范围是-32767~-0和0~32767,因为有两个零的存在,所以不同的数转载 2014-10-13 23:17:54 · 1089 阅读 · 0 评论 -
关于C中字符串的输入和输出使用的函数不同所造成的影响
今晚学习了一下字符数组的应用,根据要求(输入一行字符,统计有多少单词)编写几行代码,如下:#include#include #include void main(){ char word[100]; int i,j; i=0; gets(word); for(j=0;j<100;j++) { if(word[j]=='\0') break; else i转载 2015-05-25 00:52:48 · 635 阅读 · 0 评论 -
signed和unsigned之间
这样一个题,据说是微软面试题:unsigned int i=3;cout问结果是多少。 第一反应:-3。不过结果似乎不是这样的,写了个程序,运行了一下,发现是:4294967293。很诡异的一个数字,怎么也想不明白为什么会是这么个奇怪的数字。但是在我发现这数的十六进制数是FFFFFFFD时,我想我已经离答案很近了... 这个涉及到了混合着不同数据转载 2015-03-11 00:07:20 · 407 阅读 · 0 评论 -
关于自增、自减、顺序点、副作用、完整表达式的一些小汇总。
为什么突然又想起来了写这么一篇文章?是因为在看THQ的C程序编程的课本时,在看for循环看到一个for(i=1;i首先副作用是什么?C primer plus中对副作用(side effect)的定义为:对数据对象或文件的修改。例如i=5;计算这个表达式的副作用就是把i的值变为5;同样我们要讨论的++和--也有副作用。第二原创 2015-04-11 17:31:39 · 2377 阅读 · 1 评论 -
一个一元二次方程求解编程引申的两个知识点(abs和fabs的区别以及浮点数比较相等)
源程序如下:#include #include int main(int argc, char *argv[]){ float a,b,c,x1,x2,p,q,dish; scanf("%f%f%f",&a,&b.&c); dish=b*b-4*a*c; if(fabs(a)<=1e-7) printf("不是一元二次方程") else if(fabs(dish)<=1原创 2015-03-25 00:28:48 · 1257 阅读 · 0 评论 -
signed和unsigned之二
先看下面一段程序,这段程序摘自《C 专家编程》:#include int array[] = {23,34,12,17,204,99,16};#define TOTAL_ELEMENTS (sizeof(array)/sizeof(array[0]))int main(void){ int d=-1,x; /*........*/转载 2015-03-11 23:33:41 · 463 阅读 · 0 评论 -
关于二维数组分解为一维数组进行操作
谭4在讲解数组时举了一个例子,求三个字符串中最大的一个。#include#include #include void main(){ char str[3][20]; char string[20]; int i; for(i=0;i<3;i++) gets(str[i]); if(strcmp(str[0],str[1])>0) strcpy(string,str[原创 2015-05-29 00:37:34 · 2910 阅读 · 0 评论 -
C语言中 有符号数、无符号数、整数溢出
C语言中存在两种整数算术运算,有符号型和无符号型。无符号数运算:所有无符号数运算都是以2的n次方为模,(n是结果中的位数)。所以它不存在运算时的没有那种所谓的“溢出”,当它超过范围时,从零开始重新计数!当一个无符号数和有符号数相加的时候,有符号数会自动转化为无符号数参与运算!有符号数运算: 是可能发生“溢出”的,而且“溢出”的结果不固定。 关于无符号数减去无符号数的用法错误:转载 2015-01-21 23:31:26 · 12120 阅读 · 4 评论 -
程序员永远的痛之字符编码的奥秘
字 符编码相信是每个程序员的噩梦,只要是有中文的地方,总是会遇到各种编码的问题,并且这种问题还非常难缠,尤其在linux上,因为上面很多软件都是针对 英语国家开发的,是不会考虑其他语种编码问题。在遇到编码的无数大坑之后,我决定仔细研究下编码问题,因为这就像一道坎一直横在你面前,每次到这里你都会 跌到,每次爬起来之后,你都若无其事,这样的人被称作战士,真正的战士。可惜是个力量战士,做为新时代的智力战转载 2014-05-07 01:27:02 · 641 阅读 · 0 评论 -
表达式的值
在学习编程的过程中很多时候不知道什么是表达式的值,由于无法从DKBB上复制该篇文章所以截了两张图,其中请注意看特例.转载 2015-04-12 14:27:22 · 653 阅读 · 0 评论 -
C语言移位运算符
位移位运算符是将数据看成二进制数,对其进行向左或向右移动若干位的运算。位移位运算符分为左移和右移两种,均为双目运算符。第一运算对象是移位对象,第二个运算对象是所移的二进制位数。 位移位运算符的运算对象、运算规则与结果、结合性如表2-16所示。 移位时,移出的位数全部丢弃,移出的空位补入的数与左移还是右移花接木有关。如果是左移,则规定补入的数全部是0;如果是右移,还与被移位的数据是否转载 2015-11-24 00:16:21 · 698 阅读 · 0 评论