int_datatype.cpp revision 12855:588919e0e4aa
1/***************************************************************************** 2 3 Licensed to Accellera Systems Initiative Inc. (Accellera) under one or 4 more contributor license agreements. See the NOTICE file distributed 5 with this work for additional information regarding copyright ownership. 6 Accellera licenses this file to you under the Apache License, Version 2.0 7 (the "License"); you may not use this file except in compliance with the 8 License. You may obtain a copy of the License at 9 10 http://www.apache.org/licenses/LICENSE-2.0 11 12 Unless required by applicable law or agreed to in writing, software 13 distributed under the License is distributed on an "AS IS" BASIS, 14 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 15 implied. See the License for the specific language governing 16 permissions and limitations under the License. 17 18 *****************************************************************************/ 19 20/***************************************************************************** 21 22 int_datatype.cpp -- 23 24 Original Author: Martin Janssen, Synopsys, Inc., 2002-02-15 25 26 *****************************************************************************/ 27 28/***************************************************************************** 29 30 MODIFICATION LOG - modifiers, enter your name, affiliation, date and 31 changes you are making here. 32 33 Name, Affiliation, Date: 34 Description of Modification: 35 36 *****************************************************************************/ 37 38/* Main file for "int" data type */ 39 40#include "systemc.h" 41 42int sc_main(int ac, char *av[]) 43{ 44 45// 1. DECLARATION SYNTAX 46 int a; 47 int b; 48 49// 2. TYPE CONVERSION 50 51 // int <- int 52 a = 5; 53 b = -12; 54 55 cout << "int \t<=\t int" 56 << "\n---------------------" 57 << "\nA = " << a << "\t\t 5" 58 << "\nB = " << b << "\t\t -12" 59 << "\n" << endl; 60 61 // **** ADD MORE TYPE CONVERSIONS ***** 62 63// 3. OPERATORS 64// Supported operators: ! && || ~ & ^ | + - * / % << >> 65// &= ^= |= += -= *= /= %= <<= >>= 66// = == != < <= > >= << >> 67// ()++ ++() ()-- --() ?: , 68 69#define VAL1 13 70#define VAL2 3 71 72 unsigned int op1 = VAL1; 73 unsigned int op2 = VAL2; 74 unsigned int r1, r2, r3, r4, r5, r6, r7, r8, r9; 75 unsigned int r10, r11, r12, r13, r14, r15, r16, r17, r18, r19; 76 unsigned int r20, r21, r22, r23, r24, r25, r26, r27, r28, r29; 77 unsigned int r30, r31, r32, r33, r34, r35; 78 79 r1 = op1 * op2; // Multiplication 80 81 r2 = op1 / op2; // Division 82 83 r3 = op1 % op2; // Modulus 84 85 r4 = op1 + op2; // Addition 86 87 r5 = op1 - op2; // Subtraction 88 89 r6 = !op1; // Logical NOT 90 91 r7 = op1 && op2; // Logical AND 92 93 r8 = op1 || op2; // Logical OR 94 95 r9 = op1 < op2; // Less than 96 97 r10 = op1 <= op2; // Less than or equal 98 99 r11 = op1 > op2; // Greater than 100 101 r12 = op1 >= op2; // Greater than or equal 102 103 r13 = op1 += op2; // Compound addition 104 op1 = VAL1; op2 = VAL2; 105 106 r14 = op1 -= op2; // Compound subtraction 107 op1 = VAL1; op2 = VAL2; 108 109 r15 = op1 *= op2; // Compound multiplication 110 op1 = VAL1; op2 = VAL2; 111 112 r16 = op1 /= op2; // Compound division 113 op1 = VAL1; op2 = VAL2; 114 115 r17 = op1 %= op2; // Compound modulus 116 op1 = VAL1; op2 = VAL2; 117 118 r18 = op1 <<= op2; // Compound shift left 119 op1 = VAL1; op2 = VAL2; 120 121 r19 = op1 >>= op2; // Compound shift right 122 op1 = VAL1; op2 = VAL2; 123 124 r20 = op1 &= op2; // Compound bitwise AND 125 op1 = VAL1; op2 = VAL2; 126 127 r21 = op1 ^= op2; // Compound bitwise XOR 128 op1 = VAL1; op2 = VAL2; 129 130 r22 = op1 |= op2; // Compound bitwise OR 131 op1 = VAL1; op2 = VAL2; 132 133 r23 = op2++; // Postfix increment 134 op1 = VAL1; op2 = VAL2; 135 136 r24 = ++op2; // Prefix increment 137 op1 = VAL1; op2 = VAL2; 138 139 r25 = op2--; // Postfix decrement 140 op1 = VAL1; op2 = VAL2; 141 142 r26 = --op2; // Prefix decrement 143 op1 = VAL1; op2 = VAL2; 144 145 r27 = (op1 > op2) ? true : false; // Arithmetic if 146 r28 = (op1 < op2) ? true : false; // Arithmetic if 147 148 r29 = op1, r29 = op2; // Comma 149 150 r30 = ~op1; // Bitwise NOT 151 152 r31 = op1 << op2; // Left shift 153 op1 = VAL1; op2 = VAL2; 154 155 r32 = op1 >> op2; // Right shift 156 op1 = VAL1; op2 = VAL2; 157 158 r33 = op1 & op2; // Bitwise AND 159 160 r34 = op1 ^ op2; // Bitwise XOR 161 162 r35 = op1 | op2; // Bitwise OR 163 164 cout << "op1 \t operator \t op2 \t result [All operands are int]" 165 << "\n----------------------------------------------------------------" 166 << "\n" << op1 << "\t * \t\t " << op2 << "\t = " << r1 167 << "\n" << op1 << "\t / \t\t " << op2 << "\t = " << r2 168 << "\n" << op1 << "\t % \t\t " << op2 << "\t = " << r3 169 << "\n" << op1 << "\t + \t\t " << op2 << "\t = " << r4 170 << "\n" << op1 << "\t - \t\t " << op2 << "\t = " << r5 171 << "\n!(" << op1 << ") \t\t\t\t = " << r6 172 << "\n" << op1 << "\t && \t\t " << op2 << "\t = " << r7 173 << "\n" << op1 << "\t || \t\t " << op2 << "\t = " << r8 174 << "\n" << op1 << "\t < \t\t " << op2 << "\t = " << r9 175 << "\n" << op1 << "\t <= \t\t " << op2 << "\t = " << r10 176 << "\n" << op1 << "\t > \t\t " << op2 << "\t = " << r11 177 << "\n" << op1 << "\t >= \t\t " << op2 << "\t = " << r12 178 << "\n" << op1 << "\t += \t\t " << op2 << "\t = " << r13 179 << "\n" << op1 << "\t -= \t\t " << op2 << "\t = " << r14 180 << "\n" << op1 << "\t *= \t\t " << op2 << "\t = " << r15 181 << "\n" << op1 << "\t /= \t\t " << op2 << "\t = " << r16 182 << "\n" << op1 << "\t %= \t\t " << op2 << "\t = " << r17 183 << "\n" << op1 << "\t <<=\t\t " << op2 << "\t = " << r18 184 << "\n" << op1 << "\t >>=\t\t " << op2 << "\t = " << r19 185 << "\n" << op1 << "\t &= \t\t " << op2 << "\t = " << r20 186 << "\n" << op1 << "\t ^= \t\t " << op2 << "\t = " << r21 187 << "\n" << op1 << "\t |= \t\t " << op2 << "\t = " << r22 188 << "\n" << "\t ()++ \t " << op2 << "\t = " << r23 189 << "\n" << "\t ++() \t " << op2 << "\t = " << r24 190 << "\n" << "\t ()-- \t " << op2 << "\t = " << r25 191 << "\n" << "\t --() \t " << op2 << "\t = " << r26 192 << "\n" << op1 << "\t > ?: \t " << op2 << "\t = " << r27 193 << "\n" << op1 << "\t < ?: \t " << op2 << "\t = " << r28 194 << "\n" << op1 << "\t , \t\t " << op2 << "\t = " << r29 195 << "\n~(" << op1 << ") \t\t\t\t = " << r30 196 << "\n" << op1 << "\t << \t\t " << op2 << "\t = " << r31 197 << "\n" << op1 << "\t >> \t\t " << op2 << "\t = " << r32 198 << "\n" << op1 << "\t & \t\t " << op2 << "\t = " << r33 199 << "\n" << op1 << "\t ^ \t\t " << op2 << "\t = " << r34 200 << "\n" << op1 << "\t | \t\t " << op2 << "\t = " << r35 201 << endl; 202 203 if (op1 == op2) // Equality 204 cout << op1 << "\t == \t\t " << op2 << "\t -> true" << endl; 205 else 206 cout << op1 << "\t == \t\t " << op2 << "\t -> false" << endl; 207 208 if (op1 != op2) // Inequality 209 cout << op1 << "\t != \t\t " << op2 << "\t -> true" << endl; 210 else 211 cout << op1 << "\t != \t\t " << op2 << "\t -> false" << endl; 212 213 op1 = op2 = 0; // Assignment operator concatenation 214 cout << op1 << "\t = \t\t " << op2 << endl; 215 sc_start(0, SC_NS); 216 return 0; 217} 218