整型的signed和unsigned详解 double的二进制位显示

c语言各种数据类型的内存映像(32位平台):
0 signed char #include int main(){ char min = 1<<7; char max = (1<<7)-1; for(int i=min;i<=max;i++) if(i<0) printf(%.2x ,(unsigned char)i); else { printf(%c ,i); if(i%32==0) printf(%d ,i); } getchar();} output:
1 整型的signed和unsigned #include int main(){ signed int smin = 1<<31; signed int smax = (1<<31)-1; printf(%d,smin); // -2147483648 printf(%d,smax); // 2147483647 unsigned int umax = -1; printf(%u,umax); // 4294967295 umax = (1<<32)-1; printf(%u,umax); // 4294967295} 如果一个表达式同时包含signed和unsigned整型,signed会提升为unsgined,可能会隐藏一些意想不到的错误,特别是用在比较运算时:
unsigned int a=4294967290; int b=-6; printf(%d,a==b); // 1 , b promotes to unsigned 2 double的二进制位显示 #include void printbyte(double d){ int bs = sizeof d; unsigned char *ch = (unsigned char*)&d; for(int i=0;i #include typedef struct packed_double { unsigned int low32; // 小数位 低32位 unsigned int low20:20; // 小数位 低33-52位 unsigned int exp11:11; // 指数位 低53-63位,移码1023+二进制整数位-1 unsigned int sign:1; // 符号位} packed_double;typedef union { double d; packed_double b;} packed;int main(){ packed pd; pd.d = -15.75; pd.d = 12.3; printf(%u %u %u %u,pd.b.sign,pd.b.exp11,pd.b.low20,pd.b.low32); getchar(); return 0;}/*0 1026 1015808 0*/ 3 数组是相同数据类型的依次存储 数组名是一个存储数据首元素地址具有常量性质的特殊指针,成员是相对于基址的偏移:
#include void printarr(short arr[],int len){ for(int i=0;i 5 共用体成员的起始地址相同,共用一块内存空间,值相互覆盖 #include int main(){ union nn{int a; double b;}nn;// 成员的起始地址相同,值相互覆盖 nn.a = 123; // printf(起始地址:%x,内存空间占用:%d,&nn.a,sizeof nn.a); nn.b = 12.3; printf(起始地址:%x,内存空间占用:%d,&nn.a,sizeof nn.b); nn.a = 12; printf(起始地址:%x,内存空间占用:%d,&nn.a,sizeof nn.a); getchar();}/*起始地址:12ff40,内存空间占用:4起始地址:12ff40,内存空间占用:8起始地址:12ff40,内存空间占用:4*/ 当一些事物具有更多共性,但有少量差异时,可以只用一个内嵌一个共用体的结构体来描述:
#include #include #define maxparts 12struct parts{ // 零件int cost;char supplier[12];char unit[12] ;};struct assembly{ // 装配件int n_parts;struct {char partno[12];short quan;}parts[maxparts];};struct inventory{ // 存货类型,或是零件,或是装配件char partno[10];int quan;enum{part,assembly}type; // 存货类型union {struct parts parts;struct assembly assembly;}info;};int main(){struct inventory screen;strcpy(screen.partno,p001);screen.quan = 12;screen.type = inventory::part;screen.info.parts.cost = 122;strcpy(screen.info.parts.supplier,hw);strcpy(screen.info.parts.unit,pcs);struct inventory shell;strcpy(shell.partno,a001);shell.quan = 4;shell.type = inventory::assembly;shell.info.assembly.n_parts=22;strcpy(shell.info.assembly.parts[0].partno,d001);shell.info.assembly.parts[1].quan = 5;int costs;if(shell.type == inventory::assembly)costs = shell.info.assembly.n_parts;printf(%d,costs); //22getchar();return 0;} 6 结构体是不同数据类型的数据依次存储在一起 结构体各数据成员的引用可以通过其内存大小和字节对齐来相对于基址偏移来计算。结构体通常用于描述某一事物,用其成员来描述该事物的某些关键属性。让该事物既可以用结构体变量整体表示,也可以对其成员分别引用来处理该事物的各个属性。
#include int main(){ struct demo{char a; short b;int c;} abc; // 成员相对于基址偏移,字节对齐 abc.b=12; short *p = (short*)((int)&abc+sizeof(short)); // 模拟编译器计算第2个成员的偏移地址 printf(%d %d,abc.b,*p); // 12 12 printf(%d,sizeof(struct demo));// 8 getchar();} 7 位域是对整型数据的按位处理 (一次可以处理n个位,1<=n=0;i--) printf(%d,(n & 1i); printf();}struct bf{ unsigned a:3; unsigned b:4; unsigned c:5;}bf;int main(){ bf.a =1; bf.b=15; bf.c=3; int *p = (int*)&bf; // 505 printf(%d,*p); printbinm(*p);//00000000000000000000000111111001 getchar();} 位域(局部)二进制位显示:
#include void printbinm(unsigned int n){ for(int i=31;i>=0;i--) printf(%d,(n & 1i); printf();}int main(){ struct bf{ unsigned a:3; unsigned b:4; unsigned c:5; }bf; bf.a =1; bf.b=15; bf.c=3; int *p = (int*)&bf; // -858996231 printf(%d,*p); printbinm(*p);//11001100110011001100000111111001 getchar();}
原文标题:7 位域是对整型数据的按位处理
文章出处:【微信公众号:一口linux】欢迎添加关注!文章转载请注明出处。


ISP图像处理技术的基本框架和校正方法
空调的设计不是为了舒适,而是为了工业使用
人工智能助力疫情防控的效果显著吗
雷卯实验室:24V行车记录仪 抛负载测试(视频)
阿里成立新公司做电子元器件!
整型的signed和unsigned详解 double的二进制位显示
铁芯知识连连看
e络盟供应来自MATRIX Labs的 MATRIX Voice开发平台
中国Chiplet的机遇与挑战及芯片接口IP市场展望
百万像素以上车规级ISP芯片!富瀚微发布中国首款汽车前装芯片 已在比亚迪唐二代上量产
二次回路的绝缘标准
安森美智能感知技术和方案助力工业自动化创新
国际空间站“大限”将至,天宫或接棒国际太空合作
HTCC技术可实现密封的直通过孔密集的金属互连
光储充系统设计与商业模式
科技创新再获肯定,力合微荣膺深圳市科技进步奖
诺思发布基于FBAR工艺的两款中高频LTE频段双工器
OC5021B ——开关降压型 LED 恒流驱动器
WebXR API可能是混合现实的巨大机遇,WebVR升级再次升级
高频车载AC220V逆变器能有什么国产优质IGBT使用