C语言16位指针如何指向32位有符号数的高16位,谢谢,急!!!

作者&投稿:除厕 (若有异议请与网页底部的电邮联系)
一个32位的机器,该机器的指针是多少位答案~

指针是多少位只要看地址总线的位数就行了。80386以后的机子和ARM都是32的数据总线。所以指针的位数就是4个字节了。

根据计算机系统、编译系统的不同,32位有符号整数的定义会略有差异,通常的做法是把长整型(long)数据定义为32位,int型可以是16位,也可以是32位。
C语言中没有具体规定各类数据所占的字节数,只要求long型数据长度不短于int型,short型不长于int型。具体如何实现,由各计算机系统自行决定。
例如在Turbo C++中,int型和short型数据都是16位的(指二进制位,下同),而long型数据是32位的。而Visual c++6.0的int型数据或是long型数据都是32位的,其short型数据分配的是16位。

扩展资料
整型数据分类:
char:字符型数据,属于整型数据的一种,占用一个字节
unsigned char:无符号字符型数据,属于整型数据的一种,占用一个字节
short:短整型数据,属于整型数据的一种,占用两个字节
unsigned short:无符号短整型数据,属于整形数据的一种,占用两个字节
int:整型数据,属于整型数据的一种,占用四个字节
unsigned int:无符号整型数据,属于整型数据的一种,占用四个字节
long:长整型数据,属于整型数据的一种,占用四个字节
unsigned long:无符号长整型数据,属于整形数据的一种,占用四个字节
参考资料来源:《C语言程序设计(第三版)》谭浩强 著 清华大学出版社 第3章 数据类型 、运算符与表达式 3.3 整型数据
参考资料来源:百度百科--整型数据

不明白这样的需求,同一个运行环境中指针位宽都是一样的,如果你是想使用hack技术将指针拆分便于跨系统传递,可以如下处理:

 int a=-10;
 int *p=&a;//32位系统下指针位宽为32位
 long pp=(long)p;//将指针强制转换为long(32位)
 int ph=(pp>>16);//右移2字节取高16位
 int pl=pp&0xffff;//掩码遮蔽掉高16位取低16位
 cout<<hex<<pp<<endl;//输出指针值为110f7e4
 cout<<hex<<ph<<endl;//输出拆分后的高16位地址值为110
 cout<<hex<<pl<<endl;//输出拆分后的低16位地址值为f7e4

希望能帮到你。



unsigned short *p;
unsigned long a;
p = (unsigned short *)&a + 1;
这样就可以了


C语言16位指针如何指向32位有符号数的高16位,谢谢,急!!!
int a=-10; int *p=&a;\/\/32位系统下指针位宽为32位 long pp=(long)p;\/\/将指针强制转换为long(32位) int ph=(pp>>16);\/\/右移2字节取高16位 int pl=pp&0xffff;\/\/掩码遮蔽掉高16位取低16位 cout<<hex<<pp<<endl;\/\/输出指针值为110f7e4 cout<<hex<<ph<<endl;\/\/输出拆分后...

c语言中指针占多少个字节
如果是16位编译器,那么指针占2字节.如果是32位编译器,那么指针占4字节 如果是64位编译器 那么指针占8字节.即 指针位数和编译器位数相同.

在C语言中一个指针占用多少字节。
指针即为地址,指针几个字节跟语言无关,而是跟系统的寻址能力有关。比如以前是16位系统,指针即为2个字节,现在一般是32位系统,所以是4个字节。指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。要搞清一个指针需要搞清指针的四方面的内容:指针的类型、指针所指向的类型、指针的...

C语言指针问题
(*ptr)[5]是一个数组指针,长度为10个字节(16位编辑器,即5个int,每+1在内存上就移到下一个10字节),而arr[4][5]长度是20个int,ptr+3就刚好移到第13个int上,验证了楼上输出为30的结果(他的数组赋值第13个值为30)。为至于楼上调试出C输出结果为13,是因为ptr是首地址,+1后移到...

关于C语言数据长度的问题
其实你完全可以在VS里写点代码测试下了。Sizeof 运算符求的是数据类型在内存中所占的字节大小。如果假设sizeof(i) = 2 的话,接下来:因为 p 的类型还是指针,数据类型为 指针 占用的字节大小为 4。跟它所指向的数据无关,所以 sizeof(p) = 4 sizeof(a)的值是2*100,数组名代表数组类型的...

51汇编语言三个数据指针是什么
51汇编语言三个数据指针是DPTR、R0和R1。1、DPTR:数据指针寄存器,是一个16位的寄存器,用于指向数据存储区中的某个地址,一般用于程序与外设之间的数据传输。2、R0:寄存器0,是一个8位的寄存器,可以用于存储数据或地址。3、R1:寄存器1,也是一个8位的寄存器,用途和R0类似,可以用于存储数据或地址...

...叫远指针?在什么情况下需要使用远指针?远指针要如何使用?(C语言)
近指针是16位的指针,它只表示段内的偏移地址,因而只能对64k字节数据段内地址进行存取。如 char near *p;p=(char near *)0xffff;远指针是32位指针,它表示段地址:偏移地址,如定义远程指针p指向B500段的2号地址,即B500:0002,则可写作:char far *p;p=(char far *)0xB5000002;因此,远指针...

51单片机中PC指针长度为16位,SP长度为8位,数据指针DPTR长度为16位...
PC时程序计数器,主要是记录单片机在ROM的执行位置,一般单片机可以访问64K的地址,也就是需要16位的字宽SP是堆栈的指针,堆栈是建立在RAM的,内部的RAM是重0~255的所以只要8位就可以了DPTR是一个16位的寄存器,对这个数据寄存器赋值时,对于寄存器寻址方式,我们是把它拆分为高八位,低八位来访问的由于它是16位,所以我...

c语言指针问题
short int 占2个字节 x是输出地址,第一个输出ffca ,则第二个应该输出 ffca + 2 * 9,16进制,结果为ffdc

C语言如何定义一个16进制数
} 参考:最大数字是15位,没有超过__int64能表达的最大数。__int64最大能表示16位十六进制数。所以直接进行加减就行了,需要注意的是输入输出的格式以及十六进制表达负数的时候显示的是补码。include<stdio.h> int main(void){ long long a,b,result;while(scanf("%llx%llx",&a,&b)!=EOF){ ...

福州市13791892037: C语言16位指针如何指向32位有符号数的高16位,谢谢,急!!! -
度狭丰海: unsigned short *p; unsigned long a; p = (unsigned short *)&a + 1; 这样就可以了

福州市13791892037: c语言中8位指针如何赋值给32位的指针 -
度狭丰海: 指针和数据搞混了 pu8_a;pu32_b;为指针.u32_data是数据,所以这样写: pu32_b = (uint32_t *)(pu8_a);u32_data = (uint32_t *)pu32_b ;在此之前,pu8_a指针必须已经赋值,例如pu8_a = &u8_data,即pu8_a指向u8_data的地址

福州市13791892037: C语言位运算编程 1. 输入一个float型数,以十六进制形式输出其32位机器数? -
度狭丰海: #include<stdio.h>int main() {float d;scanf("%f",&d);float *p=&d;int *out = (int*)p;printf("%X\n",*out); }

福州市13791892037: c语言指针交换 -
度狭丰海: 这个是这样的,因为指针变量一般就是32位的长度,同样int类型也是32位的长度,p1里面的地址也是能放在p里面存储的(char ,short类型就不行了).但是对于编译器来说,存放在p里面,他就认为是一个整数,所以就不能做一些指针的操作了,比如*p.但是如果只是向你这种只是简单交换一下值是没问题的.

福州市13791892037: 请编写一个函数,将2个16位有符号数分别放入一个32位有符号数的高16位和低16位,请不要使用函数的返回值传 -
度狭丰海: 不使用返回值,就只能用指针了.. void fun(short a, short b, int *c) {*c = (a << 16) + b; }

福州市13791892037: int *a=b与int*a=&b有什么不同 -
度狭丰海: 这是典型的c语言指针题int *a表示定义了一个int型的指针 *a=b表示指针a指向b,即把b赋值给*a; &是取地址符,&b代表b在内存中的地址,*a=&b表示把b的地址赋值给*a. 利用编译器编译该代码: 结果为: 拓展资料*和&运算 (*p)操...

福州市13791892037: C语言“u8 *“什么类型? -
度狭丰海: u8 是 unsigned char u16 是 unsigned short u32 是 unsigned intu8 * 就表示指向unsigned char(无符号字符类型)的指针,属于指针类型.

福州市13791892037: c语言中指针怎么使用? -
度狭丰海: 1、指针指向变量:下面有这样一个代码块:int main() {int a=10;int b=15;test(a,b);printf("a=%d,b=%d\n",a,b);} void test(int x,int y) {int tmp;tmp=x;x=y;y=tmp;} 最后输出的结果还是a=10,b=15.因为在函数调用时,实参和形参之间只是值传递....

福州市13791892037: c语言printf疑惑 -
度狭丰海: %s是一个特例,是为了方便输出字符串才设计的.由于C中的字符串是用一个指针记录的地址,%s的功能就是将一个指针指向的内容当做字符串输出.其他的,无论是%d还是%x16都会把指针的内容(即地址)输出的.

福州市13791892037: 如何定义一个指针指向一个字符串? -
度狭丰海: 在c语言中定义一个指针 char *p; char str[10] = "afjkfdhsjk"; p = str; 指针p指向字符串str的首地址 C语言是一门通用计算机编程语言,应用广泛.C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网