精华内容
下载资源
问答
  • SINT16 s16_val = fpga_...我一看,9 bit的有符号数对short来说接收下来高7位肯定全是0,于是想当然地帮他改成了: SINT16 s16_val = fpga_spi_read(reg, addr); s16_val = (s16_val << 7) >> 7; prin.
    	SINT16 s16_val = fpga_spi_read(reg, addr);
    	printf("value = %d\n", s16_val);
    

    新同事问我一个问题,说FPGA给的9-bit有符号数,打印出来是个正数。我一看,9 bit的有符号数对short来说接收下来高7位肯定全是0,于是想当然地帮他改成了:

    	SINT16 s16_val = fpga_spi_read(reg, addr);
    	s16_val = (s16_val << 7) >> 7;
    	printf("value = %d\n", s16_val);
    

    自己感觉没什么问题,结果打印出来还是一样。我没办法,改成用signed int接收:

    	SINT32 s32_val = fpga_spi_read(reg, addr);
    	s32_val = (s32_val << 23) >> 23;
    	printf("value = %d\n", s32_val);
    

    这样打印出来的9 bit负数会正常显示了,但还是没想通上一个为什么不行,直到我后来在MinGW下又试了下(利用gcc下的typeof语法):

    	short a = 0x0fee;
    	typeof(a << 4) b;
    	printf("sizeof(b) = %d", sizeof(b));
    

    结果是4。也就是说short经过一次移位运算后返回值是int,不是short。
    所以上述问题就可以这样解决:

    	SINT16 s16_val = fpga_spi_read(reg, addr);
    	s16_val = ((short)(s16_val << 7)) >> 7;
    	printf("value = %d\n", s16_val);
    

    或者这样:

    	SINT16 s16_val = fpga_spi_read(reg, addr);
    	s16_val <<= 7;
    	s16_val >>= 7;
    	printf("value = %d\n", s16_val);
    
    展开全文
  • C语言中short 到 int 的扩展

    千次阅读 2016-06-16 23:12:26
    C语言中变量以补码形式存放在内存中,正数的补码与原码相同,负数求补码方式为(符号位不变,其余各位取反,最后末尾加1); 32位机器:int 32位,short 16位。 x = 127,正数,原码:0111 1111,补码:0111 ...

    C语言中变量以补码形式存放在内存中,正数的补码与原码相同,负数求补码方式为(符号位不变,其余各位取反,最后末尾加1);
    32位机器:int 32位,short 16位。
    x = 127,正数,原码:0111 1111,补码:0111 1111,扩展到32位高位补0,结果为0000007FH;
    Y = -9,负数,原码:1000 1001,补码:1111 0111,扩展到16位高位补1,结果为FFF7H;
    z = x + y = 118,原码:0111 0110,补码:0111 0110,扩展到32位高位补0,结果为00000076H。
    注意:扩展时,符号位不变。

    展开全文
  • C语言中short的意思

    2013-08-17 16:40:00
    不同的是,他们在内存所占的空间大小不同,short通常为int所占一半,也有一些实现为和int一样,但不会比int大。所占内存空间不同,那么可用表示的整数范围也就不同。至于具体能表示什么范围,这个问题是体系结构和...
    short和int等一样,是C或C++的一种内部数据类型。用于表示有符号整数。
    不同的是,他们在内存中所占的空间大小不同,short通常为int所占一半,也有一些实现为和int一样,但不会比int大。
    所占内存空间不同,那么可用表示的整数范围也就不同。
    至于具体能表示什么范围,这个问题是体系结构和编译环境相关的。你可以试试以下C++程序
    #include <iostream>
    using namespace std;

    int main()
    {
    cout<<sizeof(short)<<endl;
    cout<<sizeof(int)<<endl;
    cout<<sizeof(long)<<endl;
    cout<<sizeof(__int64)<<endl;
    }
    在我的电脑上VC8,编译运行结果是
    2
    4
    4
    8
    也就是说short占2字节(byte),int和long一样占4字节,__int64占8字节,占字节数越多,所能表示的数的范围越大!
    如: 2字节有符号整数 ,即 16位, 范围是 -2^15 ~ 2^16-1 , 2^n表示2的n次方。

    C 语言包含的数据类型如下图所示:

    在32 位的系统上
    short 咔出来的内存大小是2 个byte;

    int 咔出来的内存大小是4 个byte;
    long 咔出来的内存大小是4 个byte;
    float 咔出来的内存大小是4 个byte;
    double 咔出来的内存大小是8 个byte;
    char 咔出来的内存大小是1 个byte。
    (注意这里指一般情况,可能不同的平台还会有所不同,具体平台可以用sizeof 关键字测试一下)

    展开全文
  • c语言中数据截断的坑 1.数据截断的定义 当目标数据类型的内部存储空间较短时,自动将源数据类型的低位部分作为目标数据类型值的转换过程被称之为截断。 例如 char ch=65; printf("%c\n",ch); 输出结果 A 在这个...

    c语言中数据截断的坑

    1.数据截断的定义

    当目标数据类型的内部存储空间较短时,自动将源数据类型的低位部分作为目标数据类型值的转换过程被称之为截断

    例如

    char ch=65;
    printf("%c\n",ch);
    
    输出结果
    A
    

    在这个代码块中我们都知道65是A的相对应的ASCII值,然后当以字符输出时是将整型转化为字符型,在计算机内存中整型与字符型所占的内存大小就不同,因此就会在转换过程中发生截断

    2.数据在内存中的存储

    在计算机机器语言中-,一切语言都是以二进制的形式存储,而内存中存储的最小单位是bit位。整数在机内以补码存放。正整数的补码就是它的原码,负整数的补码为反码加1的结果。一般第一位是符号位1表示负号0表示正号。例如:-5

    • 原码为:10000000 00000101
    • 反码为:11111111 11111010
    • 补码为:11111111 11111011

    3.实际案例

    • 案例1

    char ch=90; [00000000 01011010]
    ---------------- [--------------01011010]

    • [ 整数转换成字符的转换过程] ,小伙伴发现没,最后8位正着写,反着写都是一样的,记住得是反着写!!!!

    低位部分作为目标数据类型值的转换

    • 案例2
    short i=-4;
    printf("ASCII=%c\n",i);
    

    输出结果为:ASCII=?
    分析: short ,两个字节,16bit位,char,1字节,8bit位。故在此代码中-4的内部存储值为:

    原码 10000000 00000100
    反码 11111111 11111011
    补码 11111111 11111100

    特别注意这时取低位常犯的坑,并不是直接取后8位,而是从最后一位往前数8位,及并不是取111111100,而是00111111,前一种不对,后一种的ASCII码值算出来就刚好是63,对应的字符就是?当时我想的就是第一种,结果
    在这里插入图片描述

    4.扩展

    这儿就简单描述一下扩展,它与截断刚好相反,是目标的存储空间比原类型长,而扩展分为符号扩展零扩展。符号扩展是对有符号数用原来的符号位进行扩展,零扩展是对无符号数扩展其高位全部为0.

    char cA=97,cB=132;
    unsigned char arr=97,abb=132;
    int i,j,r,b;
    i=cA;//最高位为零的符号扩展
    j=cB;//最高位为1的符号扩展
    r=arr;//最高位为零的无符号扩展
    b=abb;//最高位为1的无符号扩展
    printf("%d %d %d %d",i,j,r,b);
    

    输出结果:97 -124 97 132

    5.总结

    数据截断与数据扩展是c语言中的基础知识,有些坑需要注意

    展开全文
  • 今天复习C语言,发现short变量长度有点问题,希望大神来看看。第一段代码:#include int main() { unsigned short a=65534; printf("%o\n",a); return 0; } 运行结果为:177776 证明short占了16位,就是两个...
  • C语言中short、int与long用法总结

    千次阅读 2011-09-06 15:46:15
    接上一篇文章 转自 http://hi.baidu.com/zeasa/blog/item/e142c0ddad6950ef76c63894.html 下面是我关于C语言中各种数据类型长度的总结:(参考The C Programming Lan
  • 到此,再来看原码的正0和负0:0000000000000000和1000000000000000,补码表示,前者的补码还是 0000000000000000,后者经过非符号位取反加1后,同样变成了0000000000000000,也就是正0和负0在补码系统的编码是...
  • short整形在32位PC上是2个字节表示的,每个字节是8个二进制比特,一共就是16个比特 16个比特,能表示的数的个数是 0 ~ 2^16-1,即0 ~ 65535共65536个,如果表示正负整数各一半,那就是负整数-32768 ~ -1,共32768...
  • 我在您的代码进行了一些更改,以演示您尝试执行的操作,#includeint main(){short int n1, n2, somme;printf("Enter the first number: ");scanf("%hi", &n1);printf("Enter the second number : ");scanf("%...
  • C语言short int

    2018-09-27 20:52:00
    因为C语言中short int占2个字节,有16个二进制位,共可表示2^16种状态。因为它用来表示有符号数,而0也要占用一个状态。所以,16位的原码可以表示的数是-32767~+32767,它的0可以表示为二种状态,+0和-0,既浪费了...
  • 问题代码如下:(ps:用C-Free编译) #include ...可以看出两次结果的不同,前一次字符数组s第二次输出为空,第二次s便正常输出了,询问这是怎么一回事??是因为short不能用整型输入输出吗??
  • C语言中char、short、int、long各占多少字节

    万次阅读 多人点赞 2018-04-15 14:28:12
    1byte = 8bit 一个字节...short:2个字节 int:4个字节 long:4个字节 以下是windows操作系统,32位机下的代码测试结果(32位机,指针占4个字节,如变量e): windows操作系统,64位机, char:1个字节 ...
  • unsigned short a,z; printf("please input an octal number:\n"); scanf("%o", &a); /*输入一个八进制数*/ z=a & 0100000; /*0100000的二进制形式为最高位为1,其余为0*/ if(z==0100000) /*如果a...
  • C语言中的整数(short,int,long)

    万次阅读 2016-03-08 13:24:44
    整数是编程中常用的一种数据,C语言中有三种整数类型,分别为 short、int 和 long。int 称为整型,short 称为短整型,long 称为长整型,它们的长度(所占字节数)关系为: short 它们具体占用几个字节C语言并...
  • 编译预处理指令Codeblocks 运行到下一步(next line)的快捷键是F7C语言的基本构成要素是什么?关键字:是C语言预先定义的,具有特殊含义的单词C89---32个关键字Auto break case char const continue default do ...
  • C语言关键字浅析-short

    2018-11-22 09:20:19
    short,本意是“短,矮”的意思,在C语言中声明一种短整数类型,与long相对应 short与int类似,是较早出现的数据类型和较早使用的关键字之一,使用short是希望在内存中的占用空间比int小 但目前只能说,short类型...
  • C语言中的整型数据类型int、short&…

    千次阅读 2017-07-04 19:55:04
    int数据类型的位数为16位,short int数据类型的位数也是16位。而long int的位数为32位,可用来存储比较大的...C语言中的整型数据类型int、short int 和 long int   名称 全称类型说明符 缩写类型说明符  位数 
  • 由ANSI标准定义的C语言关键字共32个: auto double int struct break else long switch case enum register typedef char extern return union const float short unsigned continue for signed void default goto ...
  • C语言确定int short long的最大值

    千次阅读 2015-08-21 09:06:13
    我们知道C语言中的int short long等类型,不像Java一样具体规定了范围大小,32位系统和64位系统不同,那我们在开发时该怎么确定这些类型的最大值呢? 1、只需一小句代码,如下: ```printf("%d\n", ~(unsigned int...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,834
精华内容 1,133
关键字:

c语言中short

c语言 订阅