精华内容
下载资源
问答
  • 最近了解了一下有符号变量与无符号变量的区别和联系,看下面代码:#include <stdio.h> char getChar (int x,int y) { char c; unsigned int a = x; (a+y > 10) ? (c = 1)...

    最近了解了一下有符号变量与无符号变量的区别和联系,看下面代码:

    1. #include <stdio.h>  
    2.   
    3. char getChar (int x,int y)  
    4. {  
    5.     char c;   
    6.     unsigned int a = x;  
    7.   
    8.     (a+y > 10) ? (c = 1): (c = 2);  
    9.   
    10.     return c;  
    11. }   
    12.   
    13. int main (void)  
    14. {  
    15.     char c1 = getChar(7,4);  
    16.     char c2 = getChar(7,-7);  
    17.     char c3 = getChar(7,-8);  
    18.     char c4 = getChar(-6,7);  
    19.       
    20.     printf("c1 = %d\n",c1);  
    21.     printf("c2 = %d\n",c2);  
    22.     printf("c3 = %d\n",c3);  
    23.     printf("c4 = %d\n",c4);  
    24.       
    25.     return 0;  
    26. }  

    程序输出结果为:

    c1 = 1;

    c2 = 2;

    c3 = 1;

    c4 = 2;

    首先说明getChar()函数的作用:将参数x的值转换为无符号整形后再与y相加。其结果与101进行比较,如果大于10则函数返回1,否则返回2。

    注意:当表达式中存在有符号类型和无符号类型时,所有的操作数都自动转换为无符号型。

    因此y值会首先自动转换成无符号的整数,然后和a相加,最后再与10进行比较。


    以下是打印的各个值的分析:

    c1:传入参数分别为7和4,两个数相加后为11,大于10,c1返回1;

    c2:传入参数分别为7和-7,负数在转为无符号整数数时会先求出其补码,在32位的编译器中,-7的原码为1000 0000 0000 0000 0000 0000 0000 0111,

    补码为1111 1111 1111 1111 1111 1111 1111 1001,7的补码为0000 0000 0000 0000 0000 0000 0000 0111,相加再转换为十进制为4294967296,而无符号整形的范围 为

    0~4294967295,显然溢出了1,其最终值为0,0小于10,所以c2 = 2;

    c3:传入参数分别为7和-8,同上,a+y = 4294967295 ,刚好达到无符号整型的极限,大于10,所以c3 = 1;

    c4:传入参数分别为-6和7,同上,a+y = 4294967297,溢出2,其最终值为1,小于10,所以c3 = 2;


    C语言中提供了很多整数类型(整型),主要区别在于它们取值范围的大小。int代表有符号的整数,也就是说,用int声明的变量可以是正数也可以是负数,也可以是零,但是只能是整数。
    比如:int a = 3; int b = 0; int c = -5;
    以上这些都是合法的。
    int的取值范围因机器而异,一般而言,在较旧的PC上,int值在内存中一般是按2个字节(16位)进行存储的,在较新的PC以及工作站和大型机上,int值在内存中一般是按照4个字节(32位)进行存储的。


    C语言中将基本数据类型划分为signed(有符号)和unsigned(无符号)两大类。
    例如,初始化变量int a = -3;其实它等价于signed int a = -3;关键字signed在这里可以省略,因为C语言默认就是有符号类型的,如果要定义无符号类型的数(也就是0和正整数)可以这样定义,unsigned int b = 5;

    为了说明清楚signed和unsigned的区别,首先需要了解数据在内存中是如何存储的,在计算机中所有的数据都是按照二进制进行存储的(以下假设在字长为2个字节的机器上来表示)。

    举个例子来说,unsigned  int a = 1; 变量a在内存中就是以00000000 00000001来存储的,用图表的形式表示:



    因为这里是unsigned  int,它是无符号整型,所以的它的16位全部用来表示数据。

    int b = -1;

    这里情况就稍微有点复杂了,注意数字1和-1在内存中的存储是完全不一样的,请看,

    在计算机中,整数是以原码的形式存储的,而负数是以补码的形式存储的,原码大家都知道也就是它对应的二进制码,那什么是补码呢,就是原码的反码加1,反码就是原码的各位取反,例如-1的补码是:

    首先1的原码是                     00000000 00000001

    其次取它的反码是                 11111111 11111110

    最后在其反码的基础上加上1   11111111 11111111

    得到-1的补码是,11111111 11111111

    用图表的形式表示:

    http://hi.csdn.net/attachment/201008/11/0_1281514535se1Q.gif

    从上图中可以看出,int用15位来表示一个数字,第1位被符号位占用了,其实大家应该不难看出在数学中-1是负数中最大的整数,所以这里看到它的各个位都置1,对应于二进制来讲就是最大的数了,计算机就是按照符号位来识别该数是正是负,所以第一位只起到标识的作用并不作为数据位来使用,而其余的15位才是真正的数据位。以补码的形式来存储有个好处那就是计算机将负数的运算当作加法来处理了。那么将一个有符号的数赋给一个无符号的数会发现一个很有趣的现象,比如:

    unsigned int a;

    int b = -1;

    a = b;

    printf("a=%u",a);

    输出a=65535,这个结果是怎么出来的呢?其实很简单,b=-1,根据上图-1在计算机中的数据位是1111111 11111111,注意是数据位,是要去掉符号位的,所以是15位,a是无符号类型的整数,将b赋给a,自然a就是1111111 11111111,也是15位第一位补0,转换成十进制就是65535,它也是unsigned int范围的最大上限(0~65535 216-1),-1是最大的负整数转换成正整数当然也是最大了,这个应该很好理解了。

    参考文章:http://bbs.csdn.net/topics/340253678

    https://blog.csdn.net/BiuBiu741/article/details/75807953

    展开全文
  • 区别:符号变量和常变量

    千次阅读 2019-01-11 20:27:10
    符号变量: 1.用 #define指令定义  #define PRICE 35 2.符号变量只是用一个符号代替字符串,在预编译时把所有符号变量替换为所制定的字符串 3.没有类型,在内存中并不存在以符号变量命名的存储单元 常变量: ...

    符号变量:

    1.用 #define指令定义 

    #define PRICE 35

    2.符号变量只是用一个符号代替字符串,在预编译时把所有符号变量替换为所制定的字符串

    3.没有类型,在内存中并不存在以符号变量命名的存储单元

    常变量:

    1.用const定义

    const int b=45;

    2.具有变量的特征

    3.具有类型,在内存中存在以它命名的存储单元

     

     

     

     

    关于 typeid.name(),可点击 https://blog.csdn.net/Koyurion/article/details/86315532

     

     

     

     

     

     

    展开全文
  • 原码, 反码, 补码 详解 有符号变量与无符号变量的值的转换

    12 . 下面的代码输出是什么,为什么? 

    <span style="font-size:18px;">void foo(void) 
    { 
    unsigned int a = 6; 
    int b = -20; 
    (a+b > 6) puts("> 6") : puts("<= 6"); 
    }</span>

    这个问题测试你是否懂得 C 语言中的整数自动转换原则,我发现有些开发者懂得极少这些东西。不管如何,这无符号整型问题的答案是输出是 “>6” 。原因是当表达式中存在有符号类型和无符号类型时所有的操作数都自动转换为无符号类型。 因此 -20 变成了一个非常大的正整数,所以该表达式计算出的结果大于 6 。这一点对于应当频繁用到无符号数据类型的嵌入式系统来说是丰常重要的。

    一道题引出的相关内容:

    原码, 反码, 补码 详解

    有符号变量与无符号变量的值的转换

    展开全文
  • matlab的符号变量sym,syms

    万次阅读 多人点赞 2016-09-08 21:06:16
    syms函数的功能比sym函数更为强大,它可以一次创建任意多个符号变量.而且,syms函数的使用格式也很简单,使用格式如下:  syms var1 var2 var3...  如:  syms x y z 区别2: syms可以直接声明符号函数d(r),并且...

     

     

    sym与syms

      区别1:如果定义变量x,syms x;当用sym生成多个符号变量时,MATLAB要报错

    syms函数的功能比sym函数更为强大,它可以一次创建任意多个符号变量.而且,syms函数的使用格式也很简单,使用格式如下:

     syms var1 var2 var3...

     如:

     syms x y z

    区别2:

    syms可以直接声明符号函数d(r),并且可以对函数的形式进行赋值改变,但是sym却不可以sym d(t),只是将d(t)生成了一个整体的符号。

     

     

     

     

    >> PI = sym(pi);

    >> R = sym(5);

    >> areas = PI * R ^ 2

    areas = 25*pi

    >> class(areas)

    ans =sym

    >> sym(1/3)

    ans =1/3

    >> sym(sqrt(5))

    ans =5^(1/2)

    >> sym(sqrt(5) + 1)

    ans =910872158600853/281474976710656

    >> sym(1)/sym(3) + sym(1)

    ans =4/3

     

    展开全文
  • MATLAB符号变量的创建和简单运算

    千次阅读 2020-07-06 20:48:50
    文章目录MATLAB符号变量的创建和简单运算1、符号变量1. 1 符号变量的创建1.2 符号方程的创建3 符号矩阵的创建2、符号运算2.1 简单运算2.2 表达式的整理2.3 因式分解2.4 多项式展开2.5 合并2.6 计算分子与分母2.7 让...
  • MATLAB创建符号变量和符号表达式

    千次阅读 2020-04-25 12:01:33
    MATLAB符号运算处理的主要对象是符号或符号表达式,为此要使用一种新的数据类型---符号变量。符号表达式的创建可由符号''或sym函数来完成。
  • verilog中有符号与无符号变量区别

    千次阅读 2017-04-10 18:00:01
    verilog中有符号与无符号变量区别
  • 符号变量及其运算绪:什么是符号计算?1.字符型数据变量的创建2.符号型数据变量的创建3.符号计算的运算符与函数4.寻找符号变量5.符号精度计算6.显示符号表达式7.合并符号表达式8.展开符号表达式 绪:什么是符号计算...
  • 找不到符号 变量 BuildConfig
  • 研究1:有符号变量转化位无符号变量会怎么转换,下面是代码例子 #include <stdio.h> int main (void) { signed char temp1=-10; unsigned char temp2=0; for(;;) { temp2=temp1; pri...
  • 今天一个很偶然的机会,需要回答一个将无符号数据存到有符号变量的问题。我编码如下,结果很有意思,我是在VC6里调试的,有高人看到可否帮忙指点下。 int main() {  unsigned short temp1 = 65535;  short ...
  • Matlab如何给符号变量赋值?

    千次阅读 2018-11-14 22:45:03
    答:可以用:subs(符号变量/符号变量的矩阵) syms z1 z2 z3 z4 z11 z22 z33 z44 IL1 IL2 Us1 Us2 A=[1,-1,0,0,0,0,0,0;  0,1,1,0,0,0,0,0;  0,0,0,0,1,-1,0,0;  0,0,0,0,0,1,1,0;  1,0,0,1,1,0,0,1;  z1,z2,-...
  • MATLAB 符号变量表达式 + 方程求解

    千次阅读 2019-04-26 11:40:00
    1 % 符号变量 两种表达方式 2 a=sym('a'); 3 class(a); 4 5 syms b; 6 b; 7 8 % 符号常量 9 c=sym('3'); 10 c; 11 % 符号表达式 三种表达方式 12 f1='3*x+4'; % char类型,但是可以参与运算。...
  • matlab定义符号变量syms与sym使用方法

    千次阅读 2020-08-19 10:31:11
    syms命令定义符号变量,可以一次定义多个变量 syms x; syms x y; syms x y real; 其中real实,unreal非实,positive 正 sym一次处理一个变量或表达式,也可将字符或数字转换为符号类型 sym(A); sym(A,‘real’); ...
  • Matlab中的符号变量和符号运算

    千次阅读 2013-05-07 14:20:41
     %创建实数符号变量x y=sym('b','real'); %创建实数符号变量y z=sym('c','unreal'); %创建非实数符号变量z z=x+y*i   例:创建符号常量 >> a = sqrt (2) %对2开平方根 a=  1.4142
  • 汇编程序16位带符号变量计算

    千次阅读 2017-11-27 17:49:04
    用16位指令编写完整的程序,并上机测试,计算W=(x+y)*z,其中所有变量均为16位带符号变量。注意伪指令的使用。data segment x db 7 y db -3 z db 2 w db ? data ends;定义数据段,其中X,Y,Z为一个字节,V为16位结果...
  • 有符号与无符号变量之间的转换

    千次阅读 2015-01-27 13:30:47
    // 有符号变量和无符号变量的转换.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" char getChar(int x, int y) { char c; unsigned int a = x; (a+y > 10)? (c=1):(c=2); return c; ...
  • Theano学习系列(1):符号变量

    千次阅读 2016-01-27 11:02:18
    Theano学习系列(1):符号变量
  • MATLAB符号变量赋值

    千次阅读 2014-11-12 16:34:20
    c = F.sub(a,b);
  • Theano学习系列(3):符号变量的方法之Creat New Tensor
  • Theano学习系列(2):符号变量的方法和属性之矩阵形状的变化
  • https://jingyan.baidu.com/article/7082dc1cdbd69de40a89bdf8.html http://blog.sina.com.cn/s/blog_7f15852e0101g8tq.html
  • Matlab 符号变量与数值变量赋值问题

    千次阅读 2016-08-15 16:52:12
    syms x; a(5,5) = sin(pi/6)*12*x; 将会出现: ...Error in MuPAD command: DOUBLE cannot convert the input expression into a ...If the input expression contains a symbolic variable, use the VP
  • Android Studio 找不到符号 变量xxx 类id

    千次阅读 2018-12-16 23:01:52
    符号: 变量 tv_content 位置: 类 id 但是,在Android Studio里面点击id的使用,仍然可以跳转到xml里面。 原因是:代码是从一个module移动到另一个module,对R的引用还是引用的之前的module的,导致无法找到。 解决...
  • 有符号和无符号变量的赋值操作有时会发生莫名其妙的事情,先看下面的代码:static int codefromstring(char *buf, int len){ int a = 0; while (len--) { a = (a ) | *buf++; } return a;} 上面的代码写的有问题吗...
  • 用#define命令定义的符号常量与用constdi
  • Matlab中实现函数的符号变量

    千次阅读 2015-02-03 19:05:47
    今天在做matlab编程的时候,遇到一个问题就是:需要实现一个高次...但是实现起来的时候,发现没有什么这样的函数,一般也没有听说过matlab可以用向量去存储函数表达式,因而最后借助了sym函数变量实现了,实现得有点
  • syms a b c y1=sym('a*b+2=c'); y2=sym('a+b=c'); [a,b]=solve(y1,y2,a,b)%输出符号解 c=2; subs(a)%输出c为2时候的数值解 subs(b)%输出c为2时候的数值解  
  • 符号变量的累乘 p = ∏ k k p=\prod_{k}k p = ∏ k 2 k − 1 k 2 p=\prod_{k}{\frac{2k-1}{k^2}} syms k P1 = symprod(k, k) P2 = symprod((2*k - 1)/k^2, k) P1 = factorial (k) P2 = ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 779,996
精华内容 311,998
关键字:

符号变量