element14 Community
element14 Community
    Register Log In
  • Site
  • Search
  • Log In Register
  • About Us
  • Community Hub
    Community Hub
    • What's New on element14
    • Feedback and Support
    • Benefits of Membership
    • Personal Blogs
    • Members Area
    • Achievement Levels
  • Learn
    Learn
    • Ask an Expert
    • eBooks
    • element14 presents
    • Learning Center
    • Tech Spotlight
    • STEM Academy
    • Webinars, Training and Events
    • Learning Groups
  • Technologies
    Technologies
    • 3D Printing
    • FPGA
    • Industrial Automation
    • Internet of Things
    • Power & Energy
    • Sensors
    • Technology Groups
  • Challenges & Projects
    Challenges & Projects
    • Design Challenges
    • element14 presents Projects
    • Project14
    • Arduino Projects
    • Raspberry Pi Projects
    • Project Groups
  • Products
    Products
    • Arduino
    • Avnet Boards Community
    • Dev Tools
    • Manufacturers
    • Multicomp Pro
    • Product Groups
    • Raspberry Pi
    • RoadTests & Reviews
  • Store
    Store
    • Visit Your Store
    • Choose another store...
      • Europe
      •  Austria (German)
      •  Belgium (Dutch, French)
      •  Bulgaria (Bulgarian)
      •  Czech Republic (Czech)
      •  Denmark (Danish)
      •  Estonia (Estonian)
      •  Finland (Finnish)
      •  France (French)
      •  Germany (German)
      •  Hungary (Hungarian)
      •  Ireland
      •  Israel
      •  Italy (Italian)
      •  Latvia (Latvian)
      •  
      •  Lithuania (Lithuanian)
      •  Netherlands (Dutch)
      •  Norway (Norwegian)
      •  Poland (Polish)
      •  Portugal (Portuguese)
      •  Romania (Romanian)
      •  Russia (Russian)
      •  Slovakia (Slovak)
      •  Slovenia (Slovenian)
      •  Spain (Spanish)
      •  Sweden (Swedish)
      •  Switzerland(German, French)
      •  Turkey (Turkish)
      •  United Kingdom
      • Asia Pacific
      •  Australia
      •  China
      •  Hong Kong
      •  India
      •  Korea (Korean)
      •  Malaysia
      •  New Zealand
      •  Philippines
      •  Singapore
      •  Taiwan
      •  Thailand (Thai)
      • Americas
      •  Brazil (Portuguese)
      •  Canada
      •  Mexico (Spanish)
      •  United States
      Can't find the country/region you're looking for? Visit our export site or find a local distributor.
  • Translate
  • Profile
  • Settings
Embedded and Microcontrollers
  • Technologies
  • More
Embedded and Microcontrollers
Embedded Forum variables values not showing equal
  • Blog
  • Forum
  • Documents
  • Quiz
  • Polls
  • Files
  • Members
  • Mentions
  • Sub-Groups
  • Tags
  • More
  • Cancel
  • New
Join Embedded and Microcontrollers to participate - click to join for free!
Actions
  • Share
  • More
  • Cancel
Forum Thread Details
  • Replies 14 replies
  • Subscribers 461 subscribers
  • Views 2500 views
  • Users 0 members are here
  • embedded
Related

variables values not showing equal

Dnyaneshwar07
Dnyaneshwar07 over 2 years ago

Hello everyone,

                       i am using renesas rx231 series microcontroller and E2 studio ide for code development,

                         i have written one small code in which i have taken one signed int whoes value is -3871,and another variable which is also same signed int with value of 61665 which its 2's compliment value  -3871and another same variable i have taken signed int with hex value of -3871 which is 0xF0E1 ,with this i have written one if else statement but it is not working/not showing the same value.

signed int i = -3871;
signed int j = 0xf0e1;
signed int k = 61165;

_Bool m;

void main(void)
{

while(1)
{
R_Config_WDT_Restart();

if(j == k)
{
m = 1;
}
else if(j == i)
{
m = 1;
}
else if(k == i)
{
m = 1;
}
else
{
m = 0;
}
}

}

value of m remains 0 always.why this is happening??

please any can explain this?

  • Sign in to reply
  • Cancel

Top Replies

  • michaelkellett
    michaelkellett over 2 years ago +2
    You would do yourself a favour by using more modern C coding practice: add these includes to the start of every module: #include <stdint.h> #include <stdbool.h> declare 16 bit integers like this…
  • michaelkellett
    michaelkellett over 2 years ago in reply to phoenixcomm +2
    Arguments about C coding standards are as never-ending as those about religion. However, your suggestion re. Pascal is not rational - almost all micro-controllers are supported by a choice of C compilers…
  • javagoza
    javagoza over 2 years ago +1
    Are you sure that the data type int is 2 bytes and not 4 bytes? You are using only 2 bytes (16 bits) to represent an int value. It is more common to use 4 bytes (32 bits). I don't know the compiler you…
  • javagoza
    javagoza over 2 years ago

    Are you sure that the data type int is 2 bytes and not 4 bytes?

    You are using only 2 bytes (16 bits) to represent an int value. It is more common to use 4 bytes (32 bits). I don't know the compiler you are using.

    • Cancel
    • Vote Up +1 Vote Down
    • Sign in to reply
    • Cancel
  • shabaz
    shabaz over 2 years ago

    In situations like this, there are lots of things you can do to better understand what the compiler is doing. One way is to examine the assembler listing file (enable it in your project settings in whatever IDE you're using). Another way is to manually observe from your debugger tool's memory or variable dump. Yet another way is to write yourself a print function which will dump memory (you can cast the pointer to your variables to say char type) and then sequentially dump out each memory location for your variables so you can inspect them. Also, get used to examining the settings in the IDE for the project, because some compilers can be configured for different data sizes. Also, check the optimisation settings, just in case if you're not actually using a variable (you are not using the variable m at all, you are only setting it) the compiler may remove it completely, i.e. optimise it out, because you don't specify how you checked m. Also, you could consider making use of stdint.h (uint8_t etc).

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Cancel
  • phoenixcomm
    phoenixcomm over 2 years ago

    ints are typically 4 bytes or -2,147,483,648 to 2,147,483,647 therefore an unsigned int are 0 to 4,294,967,295,  or an int8 is only -128 to 127.  Your processor supports 8, 16, 32-bit ints. you have to know which one you are using..  

    • Cancel
    • Vote Up +1 Vote Down
    • Sign in to reply
    • Cancel
  • Former Member
    Former Member over 2 years ago

    Your MCU is a 32-bit machine.  So, this should be similar to the x386 or 32-bit RPi integer size which is 32 bits.  I'd guess that your C-compiler goes along with that.

    Why the above loop?  I don't belive that i, j, and k ever change value. 

    Anyhow, on my RPi2 (32 bits), I get i = -3871,  j = 61665,  k = 61165 i.e. m = 0.

    • Cancel
    • Vote Up +1 Vote Down
    • Sign in to reply
    • Cancel
  • michaelkellett
    michaelkellett over 2 years ago

    You would do yourself a favour by using more modern C coding practice:

    add these includes to the start of every module:

    #include <stdint.h>
    #include <stdbool.h>

    declare 16 bit integers like this:

    uint16_t auto_zero_pw = 12345;

    int16_t temperature = -10;

    and Booleans like this:

    bool alarm_flag = false;

    This way you will know  how many bits your variables are.

    You should never set a bool to values other than true or false and you should never test it against values other than true or false.

    It sounds pedantic but it helps to reduce errors.

    MK

    • Cancel
    • Vote Up +2 Vote Down
    • Sign in to reply
    • Cancel
  • Robert Peter Oakes
    Robert Peter Oakes over 2 years ago

     with your variables and as already stated, your probably working with 32bit ints

    i= oxFFFFF0E1

    j=0x0000F0E1

    k=0x0000F0E1

    So you will always get m=0

    Specifying the int16 should fix this.

    adding some debug statements inside each else block to print the result of the comparison will confirm the error. or simply change the m= statements to an int and assign different values to each compare. Obviously this is test code and your figuring things out so i hope this helps.

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Cancel
  • wolfgangfriedrich
    wolfgangfriedrich over 2 years ago

    All those 32 bit examples show j = k = 61665.

    Shouldn't m still be 1, as the first if statement is true?

     - W.Thinking

    edit: equal sign.

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Cancel
  • Former Member
    Former Member over 2 years ago in reply to wolfgangfriedrich

    signed int i = -3871;
    signed int j = 0xf0e1; # j = 61665 != k = 61165
    signed int k = 61165;

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Cancel
  • wolfgangfriedrich
    wolfgangfriedrich over 2 years ago in reply to Former Member

    My bad. You are right. Thanks.

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Cancel
  • Robert Peter Oakes
    Robert Peter Oakes over 2 years ago in reply to wolfgangfriedrich

    Slight smile

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Cancel
>
element14 Community

element14 is the first online community specifically for engineers. Connect with your peers and get expert answers to your questions.

  • Members
  • Learn
  • Technologies
  • Challenges & Projects
  • Products
  • Store
  • About Us
  • Feedback & Support
  • FAQs
  • Terms of Use
  • Privacy Policy
  • Legal and Copyright Notices
  • Sitemap
  • Cookies

An Avnet Company © 2025 Premier Farnell Limited. All Rights Reserved.

Premier Farnell Ltd, registered in England and Wales (no 00876412), registered office: Farnell House, Forge Lane, Leeds LS12 2NE.

ICP 备案号 10220084.

Follow element14

  • X
  • Facebook
  • linkedin
  • YouTube