娑婆诃💖
天道为贼
喜欢造轮子
关注数: 14
粉丝数: 70
发帖数: 5,042
关注贴吧数: 10
大家都没有注意到的一个问题:补码对指令编码空间的浪费问题! 原码1和补码-1和为0,这完美吗?我觉得不。 其一,反汇编出来的同一机器码有二义性,比如0xff你可以说它是255也可以说它是-1,至于是哪个只有设计程序的人知道了。 其二,既然同一个机器码有二义性,那么用它时也就要区别开来,增加新的指令。mul啦imul啦div啦idiv啦,ja,jg,jl,jb……这些有什么区别?反正我是晕菜了。这多出的指令可是要占用指令编码空间的啊。
为什么问号那行逗号表达式要写成赋值表达式? /** * initializer: *assignment-expression *{ initializer-list } *{ initializer-list , } * * initializer-list: *initializer *initializer-list, initializer */ // see the comments near "struct astInitializer" in header file for detail. static AstInitializer ParseInitializer(void) { AstInitializer init; AstNode *tail; CREATE_AST_NODE(init, Initializer); // { {1,2,3},4,5,6} if (CurrentToken == TK_LBRACE) { init->lbrace = TRUE; NEXT_TOKEN; init->initials = (AstNode)ParseInitializer(); tail = &init->initials->next; while (CurrentToken == TK_COMMA) { NEXT_TOKEN; if (CurrentToken == TK_RBRACE) break; *tail = (AstNode)ParseInitializer(); tail = &(*tail)->next; } Expect(TK_RBRACE); } else { init->lbrace = FALSE; init->expr = ParseAssignmentExpression(); //?? } return init; } 为什么问号那行逗号表达式要写成赋值表达式?
大佬请进 为什么总是得不到想要的结果?下面摘录有问题的主要代码 extern long filesize; extern FILE *fp; extern unsigned char *data; static char md5_str[33]; /****************************************************** *函数名称:Compute_data_md5 *输 入:data 校验数据首地址 len 校验数据长度 md5_str 字符串形式的MD5值 *输 出:无 *功 能:计算数据MD5值,并以字符串形式返回 *******************************************************/ int Compute_file_md5(const FILE *fp, char *_md5_str) { int i; unsigned char md5_value[MD5_SIZE]; MD5_CTX md5; // init md5 MD5Init(&md5); //初始化md5 MD5Update(&md5,data,filesize); //md5计算函数 MD5Final(&md5, md5_value); //生成md5码 for(i = 0; i < MD5_SIZE; i++) _snprintf(md5_str + i*2, 2+1, "%02x", md5_value[i]); md5_str[MD5_STR_LEN] = '\0'; // add end printf("标准:%s\n实际:%s\n",_md5_str,strupr(md5_str)); if (strcmp(strupr(md5_str),_md5_str) == 0) printf("文件正确\n"); else printf("文件错误\n"); return 0; } 估计错误就在md5计算函数那一行,怎么写?
定义一大堆常量用什么好? 一大堆#define还是枚举? 为什么有的文件是一大堆define?
牢骚:安卓什么时候淘汰? 受够了堆硬件竞赛 谷歌新系统,怎么还没憋出来?
C语言能写多核程序吗? 我觉得吧:操作系统和库支持就没问题
想给C语言加个新特性:结构体变量初始值绑定。 用C写oop程序一般都是这样子的: #define class struct class person { int age; char name[128]; void (*introduce)(class person *p); }; class person *p=(class person*)malloc(sizeof(class person)); 然后初始化结构体,给函数指针赋值: p->age=...; p->name=...; p->intriduce=person_introdude; 可不可以增加一个特性,在结构体定义时就绑定它的字段的值: class person { int age; char name[128]; void (*introduce)(class person *p) ::person_introduce; }; 这样在定义结构体变量时直接使用绑定字段的值;执行class person *p=(class person*)malloc(sizeof(class person));时直接由强制转换的类型决定绑定的值,这样就更像C++的类了。
谁说C89没有布尔类型? 其实一切基本数据类型都能当布尔型用 没见if(a) if(!a)吗?
算术编码算法的解码函数怎么写? 看得脑瓜疼 void decode (unsigned char const *outbuf,long size) { }
用C写socket太痛苦了,稍加处理了一下,舒服多了。 //business.c #include <stdio.h> #include <Winsock2.h> #pragma comment(lib,"ws2_32.lib") void Startup(WSADATA *pwsaData) { if (WSAStartup(MAKEWORD(2,1),pwsaData) != 0) //调用Windows Sockets DLL { printf("Winsock无法初始化!\n"); WSACleanup(); return; } } void Socket(int family,int type,int protocol,SOCKET *psock) { SOCKET sockfd=socket(AF_INET,SOCK_DGRAM,0); if (sockfd == INVALID_SOCKET) { printf("客户端创建SOCKET失败,退出\n"); exit(-1); } *psock= sockfd; } void SendTo(SOCKET sockfd,char *buf,int bufsize,int flags,const struct sockaddr *servAddr,int len) { int status=sendto(sockfd,buf,bufsize,flags,servAddr,len); if (status == SOCKET_ERROR) { printf("客户端发送数据失败,退出\n"); exit(-1); } } void RecvFrom(SOCKET sockfd,char *buf,int bufsize,int flags, struct sockaddr *servAddr,int *len) { int status=recvfrom(sockfd,buf,bufsize,flags,servAddr,len); if (status == SOCKET_ERROR) { printf("客户端接收数据失败,退出\n"); exit(-1); } } void Bind(SOCKET sockfd,struct sockaddr *plocalAddr,int len) { int status=bind(sockfd,plocalAddr,len); if (status == SOCKET_ERROR) { printf("服务器绑定错误,退出\n"); exit(-1); } }
这头文件写的什么?想打人! _CRTIMP unsigned long __cdecl _beginthreadex(void *, unsigned,unsigned (__stdcall *) (void *), void *, unsigned, unsigned *); 连个参数名都没有,注释也没有
无聊发个大质数探索程序低效版 void prime() { unsigned int n,i; for (n=5;n<1000000;n++) { for (i=2;i<n;i++) { if (n%i == 0) break; else { if (i == n-1) printf("%d is prime number!\n",n); else continue; } } } }
一个存储类型的问题 书上都说auto可以修饰所有类型的变量,问题来了,全局变量可以吗? auto int a=0; demo.c demo.c(2) : warning C4042: “a”: 有坏的存储类 Microsoft (R) Incremental Linker Version 9.00.21022.08 Copyright (C) Microsoft Corporation. All rights reserved. 提示a有坏的存储类型
C语言编程能完全杜绝全局变量吗? 如果可以,那要extern关键字干什么?
16X16点阵版你好 #include <stdio.h> unsigned short ni[]={0x1100,0x1100,0x1100,0x23FC,0x2204,0x6408,0xA840,0x2040, 0x2150,0x2148,0x224C,0x2444,0x2040,0x2040,0x2140,0x2080}; unsigned short hao[]={0x1000,0x11FC,0x1004,0x1008,0xFC10,0x2420,0x2424,0x27FE, 0x2420,0x4420,0x2820,0x1020,0x2820,0x4420,0x84A0,0x0040}; char ch[512]; void depress(unsigned short *mod) { int i,b,n=0; for (i=0;i<16;i++) { for (b=0;b<16;b++) { if ( ((mod[i]>>(15-b))&0x01) == 0 ) ch[n]=' '; else ch[n]='*'; n++; } ch[n++]='\n'; } } int main(int argc,char *argv[]) { depress(ni); printf("%s",ch); depress(hao); printf("%s",ch); return 0; }
除了辗转相除法,还有什么算法求一个数的任意进制? rtrtrtrtrtrtrtrtrtrtrtrt 翻译:如题入体软突日它肉体肉疼.......
为什么C语言要这么设计啊? 为什么C语言能容忍这样的代码? if (5) {....} 5是非零我知道,但它是布尔类型吗?
C语言模拟继承的实现。 #include <stdio.h> #define EXTENDS(CCLASS,SCLASS) \ struct CCLASS \ { \ struct SCLASS; #define END \ }; struct person { char name[20]; int age; }; EXTENDS(student,person) int score; END int main() { struct student stu1={"sam",21,89}; printf("%s %d %d",stu1.name,stu1.age,stu1.score); return 0; }
玛德垃圾!知乎的人工智障!!每次提问都被和谐! 又回来玩贴吧了!
写基于哈夫曼编码的文件压缩解压程序,卡在io上了 到底该怎么写啊!!!
自己真正经历过的坑才是“”巨坑“”! if ( ( a[row]>>(15-col) ) & 0x1 == 0 ) printf(" "); else printf("."); 如果你认为以上代码能够计算a[row]中的某一位值,然后根据0,1来决定打印空格还是.,那就掉坑里了.实际上它总是执行else语句!因为 ==比 & 优先级高! 正确的做法是这样的: if ( ( ( a[row]>>(15-col) ) & 0x1) == 0 ) printf(" "); else printf(".");
哪位大神能不用运行看出来下面的程序打印的是什么? #include <stdio.h> unsigned short a[8]={0x0180,0x0240,0x0660,0x0c30,0x1ff8,0x300c,0x6006,0xf00f}; int b[16]; void depress(unsigned short n) { int i; unsigned short m; for (i=15;i>=0;i--) { m=n>>i; m&=0x1; if (m) b[15-i]=1; else b[15-i]=0; } } int main() { int row,col,i; printf("\n"); for (row=0;row<8;row++) for (col=0;col<16;col++) { depress(a[row]); if (b[col] ==0 ) printf(" "); else printf("*"); if (col==15) printf("\n"); } return 0; } 还有就是怎么优化?
吐槽:C语言的运算符优先级很乱! 41个操作符,15个优先级,还有左右结合性,晕了没有? 更坑的是,有些运算符的优先级是不合理的,如 & | 的优先级低于 == !=
吐槽:C语言函数指针的语法有些混乱。 对于 int (*pfunc) (void); 调用形式居然有2种 pfunc();和(*pfunc)(); 甚至(*********************************pfunc)();
1
下一页